]> granicus.if.org Git - clang/commit
Define weak and __weak to mean ARC-style weak references, even in MRC.
authorJohn McCall <rjmccall@apple.com>
Thu, 22 Oct 2015 18:38:17 +0000 (18:38 +0000)
committerJohn McCall <rjmccall@apple.com>
Thu, 22 Oct 2015 18:38:17 +0000 (18:38 +0000)
commitabdd82457f9fc8ba1f34380f57b2f73d63572dc6
tree2a1e83f73a9e4133dad83036dd5d651bb59de16a
parent93fdb3f356ea25490d6eb3b8abf0f1c540b7cd4b
Define weak and __weak to mean ARC-style weak references, even in MRC.

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
35 files changed:
include/clang/Basic/DiagnosticDriverKinds.td
include/clang/Basic/DiagnosticSemaKinds.td
include/clang/Basic/LangOptions.def
include/clang/Driver/CC1Options.td
lib/ARCMigrate/ARCMT.cpp
lib/ARCMigrate/Transforms.cpp
lib/AST/ASTContext.cpp
lib/Basic/Targets.cpp
lib/CodeGen/CGBlocks.cpp
lib/CodeGen/CGExpr.cpp
lib/CodeGen/CGExprCXX.cpp
lib/CodeGen/CGObjC.cpp
lib/CodeGen/CGObjCMac.cpp
lib/Driver/Tools.cpp
lib/Frontend/CompilerInvocation.cpp
lib/Frontend/InitPreprocessor.cpp
lib/Lex/PPMacroExpansion.cpp
lib/Sema/AnalysisBasedWarnings.cpp
lib/Sema/SemaCast.cpp
lib/Sema/SemaCodeComplete.cpp
lib/Sema/SemaDecl.cpp
lib/Sema/SemaExpr.cpp
lib/Sema/SemaObjCProperty.cpp
lib/Sema/SemaType.cpp
test/ARCMT/GC-no-arc-runtime.m
test/CodeGenObjC/blocks.m
test/CodeGenObjC/mrc-weak.m [new file with mode: 0644]
test/CodeGenObjC/mrr-captured-block-var-inlined-layout.m
test/Index/complete-property-flags.m
test/SemaObjC/attr-objc-gc.m
test/SemaObjC/mrc-weak.m [new file with mode: 0644]
test/SemaObjC/no-gc-weak-test.m
test/SemaObjC/nonarc-weak.m [deleted file]
test/SemaObjC/property-in-class-extension-1.m
test/SemaObjC/synthesized-ivar.m