From: Saleem Abdulrasool Date: Sun, 7 Feb 2016 02:30:59 +0000 (+0000) Subject: Sema: handle typo correction on ARC'ed ivar X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e12345156608aa52e3d4a2d48b1616956c04060a;p=clang 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. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@260017 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaExprCXX.cpp b/lib/Sema/SemaExprCXX.cpp index 3083a1f50d..088b0ba423 100644 --- a/lib/Sema/SemaExprCXX.cpp +++ b/lib/Sema/SemaExprCXX.cpp @@ -6590,6 +6590,10 @@ public: return Owned(E); } + ExprResult TransformObjCIvarRefExpr(ObjCIvarRefExpr *E) { + return Owned(E); + } + ExprResult Transform(Expr *E) { ExprResult Res; while (true) { diff --git a/test/SemaObjC/typo-correction-arc.m b/test/SemaObjC/typo-correction-arc.m index 9131ca86dc..206d545ae7 100644 --- a/test/SemaObjC/typo-correction-arc.m +++ b/test/SemaObjC/typo-correction-arc.m @@ -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