r260016 - Sema: handle typo correction with ARC'ed objc properties
Saleem Abdulrasool via cfe-commits
cfe-commits at lists.llvm.org
Sat Feb 6 18:30:55 PST 2016
Author: compnerd
Date: Sat Feb 6 20:30:55 2016
New Revision: 260016
URL: http://llvm.org/viewvc/llvm-project?rev=260016&view=rev
Log:
Sema: handle typo correction with ARC'ed objc properties
We would previously assert in findCapturingExpr when performing a typo
correction resulting in an assignment of an ObjC property with a strong lifetype
specifier due to the expression not being rooted in the file (invalid SLoc)
during the retain cycle check on the typo-corrected expression. Handle the
expression type appropriately during the TreeTransform to ensure that we have a
source location associated with the expression.
Fixes PR26486.
Added:
cfe/trunk/test/SemaObjC/typo-correction-arc.m
Modified:
cfe/trunk/lib/Sema/SemaExprCXX.cpp
Modified: cfe/trunk/lib/Sema/SemaExprCXX.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExprCXX.cpp?rev=260016&r1=260015&r2=260016&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaExprCXX.cpp (original)
+++ cfe/trunk/lib/Sema/SemaExprCXX.cpp Sat Feb 6 20:30:55 2016
@@ -6586,6 +6586,10 @@ public:
ExprResult TransformBlockExpr(BlockExpr *E) { return Owned(E); }
+ ExprResult TransformObjCPropertyRefExpr(ObjCPropertyRefExpr *E) {
+ return Owned(E);
+ }
+
ExprResult Transform(Expr *E) {
ExprResult Res;
while (true) {
Added: cfe/trunk/test/SemaObjC/typo-correction-arc.m
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/typo-correction-arc.m?rev=260016&view=auto
==============================================================================
--- cfe/trunk/test/SemaObjC/typo-correction-arc.m (added)
+++ cfe/trunk/test/SemaObjC/typo-correction-arc.m Sat Feb 6 20:30:55 2016
@@ -0,0 +1,24 @@
+// RUN: %clang_cc1 -triple i386-apple-macosx10.10 -fobjc-arc -fsyntax-only -Wno-objc-root-class %s -verify
+
+typedef unsigned long NSUInteger;
+
+ at interface NSArray
+- (instancetype)initWithObjects:(const id[])objects count:(NSUInteger)count;
+ at end
+
+ at interface I
+ at property NSArray *array;
+ at end
+
+ at interface J
+- (void)setArray:(id)array;
+ at end
+
+ at implementation J {
+ I *i;
+}
+- (void)setArray:(id)array { // expected-note{{'array' declared here}}
+ i.array = aray; // expected-error{{use of undeclared identifier 'aray'; did you mean 'array'}}
+}
+ at end
+
More information about the cfe-commits
mailing list