]> granicus.if.org Git - clang/commitdiff
Sema: handle typo correction on ARC'ed ivar
authorSaleem Abdulrasool <compnerd@compnerd.org>
Sun, 7 Feb 2016 02:30:59 +0000 (02:30 +0000)
committerSaleem Abdulrasool <compnerd@compnerd.org>
Sun, 7 Feb 2016 02:30:59 +0000 (02:30 +0000)
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.

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

lib/Sema/SemaExprCXX.cpp
test/SemaObjC/typo-correction-arc.m

index 3083a1f50dff3a2688b60188db83db7207d188ea..088b0ba423e46c9618ce9db1dd782c1620d1f874 100644 (file)
@@ -6590,6 +6590,10 @@ public:
     return Owned(E);
   }
 
+  ExprResult TransformObjCIvarRefExpr(ObjCIvarRefExpr *E) {
+    return Owned(E);
+  }
+
   ExprResult Transform(Expr *E) {
     ExprResult Res;
     while (true) {
index 9131ca86dc92f25d1163e9e420311e2d3109406b..206d545ae7e376f013fcbf995653b5b623cae707 100644 (file)
@@ -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