diff options
author | John McCall <rjmccall@apple.com> | 2015-10-22 18:38:17 +0000 |
---|---|---|
committer | John McCall <rjmccall@apple.com> | 2015-10-22 18:38:17 +0000 |
commit | 460ce58fa6a165ebad98c848aaec2f09cefe7603 (patch) | |
tree | 9520b5118e8d8cc7cbe1449609c40f3b9ec7b11b /clang/lib/ARCMigrate/Transforms.cpp | |
parent | 63d23d1b127e43cff2b287b371fdbf6e0a6d83f0 (diff) | |
download | bcm5719-llvm-460ce58fa6a165ebad98c848aaec2f09cefe7603.tar.gz bcm5719-llvm-460ce58fa6a165ebad98c848aaec2f09cefe7603.zip |
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
llvm-svn: 251041
Diffstat (limited to 'clang/lib/ARCMigrate/Transforms.cpp')
-rw-r--r-- | clang/lib/ARCMigrate/Transforms.cpp | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/clang/lib/ARCMigrate/Transforms.cpp b/clang/lib/ARCMigrate/Transforms.cpp index 56d3af7233b..99cfacb63dc 100644 --- a/clang/lib/ARCMigrate/Transforms.cpp +++ b/clang/lib/ARCMigrate/Transforms.cpp @@ -42,7 +42,7 @@ bool MigrationPass::CFBridgingFunctionsDefined() { bool trans::canApplyWeak(ASTContext &Ctx, QualType type, bool AllowOnUnknownClass) { - if (!Ctx.getLangOpts().ObjCARCWeak) + if (!Ctx.getLangOpts().ObjCWeakRuntime) return false; QualType T = type; |