Skip to content
  • Hal Finkel's avatar
    Fix AddAliasScopeMetadata to not add scopes when deriving from unknown pointers · a3708df4
    Hal Finkel authored
    The previous implementation of AddAliasScopeMetadata, which adds noalias
    metadata to preserve noalias parameter attribute information when inlining had
    a flaw: it would add alias.scope metadata to accesses which might have been
    derived from pointers other than noalias function parameters. This was
    incorrect because even some access known not to alias with all noalias function
    parameters could easily alias with an access derived from some other pointer.
    Instead, when deriving from some unknown pointer, we cannot add alias.scope
    metadata at all. This fixes a miscompile of the test-suite's tramp3d-v4.
    Furthermore, we cannot add alias.scope to functions unless we know they
    access only argument-derived pointers (currently, we know this only for
    memory intrinsics).
    
    Also, we fix a theoretical problem with using the NoCapture attribute to skip
    the capture check. This is incorrect (as explained in the comment added), but
    would not matter in any code generated by Clang because we get only inferred
    nocapture attributes in Clang-generated IR.
    
    This functionality is not yet enabled by default.
    
    llvm-svn: 216818
    a3708df4
Loading