r260017 - Sema: handle typo correction on ARC'ed ivar

Saleem Abdulrasool via cfe-commits cfe-commits at lists.llvm.org
Sat Feb 6 18:30:59 PST 2016


Author: compnerd
Date: Sat Feb  6 20:30:59 2016
New Revision: 260017

URL: http://llvm.org/viewvc/llvm-project?rev=260017&view=rev
Log:
Sema: handle typo correction on ARC'ed ivar

The ivar ref would be transformed by the Typo Correction TreeTransform, but not
be owned, resulting in the source location being invalid.  This would eventually
lead to an assertion in findCapturingExpr.  Prevent this assertion from
triggering.

Resolves PR25113.

Modified:
    cfe/trunk/lib/Sema/SemaExprCXX.cpp
    cfe/trunk/test/SemaObjC/typo-correction-arc.m

Modified: cfe/trunk/lib/Sema/SemaExprCXX.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExprCXX.cpp?rev=260017&r1=260016&r2=260017&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaExprCXX.cpp (original)
+++ cfe/trunk/lib/Sema/SemaExprCXX.cpp Sat Feb  6 20:30:59 2016
@@ -6590,6 +6590,10 @@ public:
     return Owned(E);
   }
 
+  ExprResult TransformObjCIvarRefExpr(ObjCIvarRefExpr *E) {
+    return Owned(E);
+  }
+
   ExprResult Transform(Expr *E) {
     ExprResult Res;
     while (true) {

Modified: cfe/trunk/test/SemaObjC/typo-correction-arc.m
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/typo-correction-arc.m?rev=260017&r1=260016&r2=260017&view=diff
==============================================================================
--- cfe/trunk/test/SemaObjC/typo-correction-arc.m (original)
+++ cfe/trunk/test/SemaObjC/typo-correction-arc.m Sat Feb  6 20:30:59 2016
@@ -2,16 +2,21 @@
 
 typedef unsigned long NSUInteger;
 
+id nameless;                                  // expected-note{{'nameless' declared here}}
+
 @interface NSArray
 - (instancetype)initWithObjects:(const id[])objects count:(NSUInteger)count;
 @end
 
 @interface I
 @property NSArray *array;
+- (id)getArrayById:(id)name;
+- (void)setArrayValue:(id)array;
 @end
 
 @interface J
 - (void)setArray:(id)array;
+- (void)setIvarArray;
 @end
 
 @implementation J {
@@ -20,5 +25,8 @@ typedef unsigned long NSUInteger;
 - (void)setArray:(id)array {  // expected-note{{'array' declared here}}
   i.array = aray;             // expected-error{{use of undeclared identifier 'aray'; did you mean 'array'}}
 }
+- (void)setIvarArray {
+  [i setArrayValue:[i getArrayById:nameles]]; // expected-error{{use of undeclared identifier 'nameles'; did you mean 'nameless'}}
+}
 @end
 




More information about the cfe-commits mailing list