Skip to content
Snippets Groups Projects
  • John McCall's avatar
    abdd8245
    Define weak and __weak to mean ARC-style weak references, even in MRC. · abdd8245
    John McCall authored
    Previously, __weak was silently accepted and ignored in MRC mode.
    That makes this a potentially source-breaking change that we have to
    roll out cautiously.  Accordingly, for the time being, actual support
    for __weak references in MRC is experimental, and the compiler will
    reject attempts to actually form such references.  The intent is to
    eventually enable the feature by default in all non-GC modes.
    (It is, of course, incompatible with ObjC GC's interpretation of
    __weak.)
    
    If you like, you can enable this feature with
      -Xclang -fobjc-weak
    but like any -Xclang option, this option may be removed at any point,
    e.g. if/when it is eventually enabled by default.
    
    This patch also enables the use of the ARC __unsafe_unretained qualifier
    in MRC.  Unlike __weak, this is being enabled immediately.  Since
    variables are essentially __unsafe_unretained by default in MRC,
    the only practical uses are (1) communication and (2) changing the
    default behavior of by-value block capture.
    
    As an implementation matter, this means that the ObjC ownership
    qualifiers may appear in any ObjC language mode, and so this patch
    removes a number of checks for getLangOpts().ObjCAutoRefCount
    that were guarding the processing of these qualifiers.  I don't
    expect this to be a significant drain on performance; it may even
    be faster to just check for these qualifiers directly on a type
    (since it's probably in a register anyway) than to do N dependent
    loads to grab the LangOptions.
    
    rdar://9674298
    
    git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@251041 91177308-0d34-0410-b5e6-96231b3b80d8
    abdd8245
    History
    Define weak and __weak to mean ARC-style weak references, even in MRC.
    John McCall authored
    Previously, __weak was silently accepted and ignored in MRC mode.
    That makes this a potentially source-breaking change that we have to
    roll out cautiously.  Accordingly, for the time being, actual support
    for __weak references in MRC is experimental, and the compiler will
    reject attempts to actually form such references.  The intent is to
    eventually enable the feature by default in all non-GC modes.
    (It is, of course, incompatible with ObjC GC's interpretation of
    __weak.)
    
    If you like, you can enable this feature with
      -Xclang -fobjc-weak
    but like any -Xclang option, this option may be removed at any point,
    e.g. if/when it is eventually enabled by default.
    
    This patch also enables the use of the ARC __unsafe_unretained qualifier
    in MRC.  Unlike __weak, this is being enabled immediately.  Since
    variables are essentially __unsafe_unretained by default in MRC,
    the only practical uses are (1) communication and (2) changing the
    default behavior of by-value block capture.
    
    As an implementation matter, this means that the ObjC ownership
    qualifiers may appear in any ObjC language mode, and so this patch
    removes a number of checks for getLangOpts().ObjCAutoRefCount
    that were guarding the processing of these qualifiers.  I don't
    expect this to be a significant drain on performance; it may even
    be faster to just check for these qualifiers directly on a type
    (since it's probably in a register anyway) than to do N dependent
    loads to grab the LangOptions.
    
    rdar://9674298
    
    git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@251041 91177308-0d34-0410-b5e6-96231b3b80d8
Code owners
Assign users and groups as approvers for specific file changes. Learn more.