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.

llvm-svn: 260017
This commit is contained in:
Saleem Abdulrasool 2016-02-07 02:30:59 +00:00
parent 407f36bde9
commit 02e19a1696
2 changed files with 12 additions and 0 deletions

View File

@ -6590,6 +6590,10 @@ public:
return Owned(E);
}
ExprResult TransformObjCIvarRefExpr(ObjCIvarRefExpr *E) {
return Owned(E);
}
ExprResult Transform(Expr *E) {
ExprResult Res;
while (true) {

View 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