]> granicus.if.org Git - clang/commitdiff
[arcmt] Also avoid 'weak' for forward references to objc classes.
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>
Tue, 12 Jul 2011 22:16:25 +0000 (22:16 +0000)
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>
Tue, 12 Jul 2011 22:16:25 +0000 (22:16 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@135003 91177308-0d34-0410-b5e6-96231b3b80d8

lib/ARCMigrate/Transforms.cpp
test/ARCMT/assign-prop-with-arc-runtime.m
test/ARCMT/assign-prop-with-arc-runtime.m.result

index c2f85f65b76b0ac45c91a6e84184d8a8a518d875..c0a7b95fe887361f518a7b128172af2e0157fab9 100644 (file)
@@ -75,6 +75,8 @@ bool trans::canApplyWeak(ASTContext &Ctx, QualType type) {
     ObjCInterfaceDecl *Class = ObjT->getInterfaceDecl();
     if (!Class || Class->getName() == "NSObject")
       return false; // id/NSObject is not safe for weak.
+    if (Class->isForwardDecl())
+      return false; // forward classes are not verifiable, therefore not safe.
     if (Class->isArcWeakrefUnavailable())
       return false;
     if (isClassInWeakBlacklist(Class))
index e9416fe029291ad4b846787b1edf0114322c6fce..0516e6d69432a99ea29891b4bff8ee437e4eeb0c 100644 (file)
@@ -9,9 +9,10 @@ __attribute__((objc_arc_weak_reference_unavailable))
 @end
 
 @class _NSCachedAttributedString;
-
 typedef _NSCachedAttributedString *BadClassForWeak;
 
+@class Forw;
+
 @interface Foo : NSObject {
   Foo *x, *w, *q1, *q2;
   Foo *z1, *__unsafe_unretained z2;
@@ -19,6 +20,7 @@ typedef _NSCachedAttributedString *BadClassForWeak;
   BadClassForWeak bcw;
   id not_safe1;
   NSObject *not_safe2;
+  Forw *not_safe3;
 }
 @property (readonly,assign) Foo *x;
 @property (assign) Foo *w;
@@ -28,8 +30,9 @@ typedef _NSCachedAttributedString *BadClassForWeak;
 @property (assign) BadClassForWeak bcw;
 @property (assign) id not_safe1;
 @property (assign) NSObject *not_safe2;
+@property (assign) Forw *not_safe3;
 @end
 
 @implementation Foo
-@synthesize x,w,q1,q2,z1,z2,oo,bcw,not_safe1,not_safe2;
+@synthesize x,w,q1,q2,z1,z2,oo,bcw,not_safe1,not_safe2,not_safe3;
 @end
index 349bfa28c45d8192d7eade6b2bcd4d44fec29d7f..c44969907f2dba84b6155e7f236daf9ac02d0a5d 100644 (file)
@@ -9,9 +9,10 @@ __attribute__((objc_arc_weak_reference_unavailable))
 @end
 
 @class _NSCachedAttributedString;
-
 typedef _NSCachedAttributedString *BadClassForWeak;
 
+@class Forw;
+
 @interface Foo : NSObject {
   Foo *__weak x, *__weak w, *__weak q1, *__weak q2;
   Foo *__unsafe_unretained z1, *__unsafe_unretained z2;
@@ -19,6 +20,7 @@ typedef _NSCachedAttributedString *BadClassForWeak;
   BadClassForWeak __unsafe_unretained bcw;
   id __unsafe_unretained not_safe1;
   NSObject *__unsafe_unretained not_safe2;
+  Forw *__unsafe_unretained not_safe3;
 }
 @property (readonly,weak) Foo *x;
 @property (weak) Foo *w;
@@ -28,8 +30,9 @@ typedef _NSCachedAttributedString *BadClassForWeak;
 @property (assign) BadClassForWeak bcw;
 @property (assign) id not_safe1;
 @property (assign) NSObject *not_safe2;
+@property (assign) Forw *not_safe3;
 @end
 
 @implementation Foo
-@synthesize x,w,q1,q2,z1,z2,oo,bcw,not_safe1,not_safe2;
+@synthesize x,w,q1,q2,z1,z2,oo,bcw,not_safe1,not_safe2,not_safe3;
 @end