]> granicus.if.org Git - clang/commitdiff
Objective-C ARC. Fixes a crash when checking for 'weak' propery
authorFariborz Jahanian <fjahanian@apple.com>
Fri, 21 Nov 2014 21:12:11 +0000 (21:12 +0000)
committerFariborz Jahanian <fjahanian@apple.com>
Fri, 21 Nov 2014 21:12:11 +0000 (21:12 +0000)
whose base is not an expression. rdar://19053620

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@222570 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/ScopeInfo.cpp
test/SemaObjC/arc-repeated-weak.mm

index 00d9982ac06fe4c996ceca3f93c22e7a9b4a439c..63ef3b2355fbd495d02ff64c1eb2a18a3cc50aab 100644 (file)
@@ -176,6 +176,8 @@ void FunctionScopeInfo::markSafeWeakUse(const Expr *E) {
   // Has this weak object been seen before?
   FunctionScopeInfo::WeakObjectUseMap::iterator Uses;
   if (const ObjCPropertyRefExpr *RefExpr = dyn_cast<ObjCPropertyRefExpr>(E)) {
+    if (!RefExpr->isObjectReceiver())
+      return;
     if (isa<OpaqueValueExpr>(RefExpr->getBase()))
      Uses = WeakObjectUses.find(WeakObjectProfileTy(RefExpr));
     else {
index 64df92a9afa98a26e01fc6c002627a1ea1d675ec..264c598942aec4ed62971aa0a57f4c7933c6f18c 100644 (file)
@@ -425,3 +425,17 @@ void doubleLevelAccessIvar(Test *a, Test *b) {
 }
 @end
 
+// rdar://19053620
+@interface NSNull
++ (NSNull *)null;
+@end
+
+@interface INTF @end
+
+@implementation INTF
+- (void) Meth : (id) data
+{
+  data = data ?: NSNull.null;
+}
+@end
+