Author: akirtzidis
Date: Tue Jul 28 01:12:24 2015
New Revision: 243387
URL: http://llvm.org/viewvc/llvm-project?rev=243387&view=rev
Log:
[sema] Fix crash when typo-transforming an expression containing an ObjC super
message expression.
rdar://21427916
Modified:
cfe/trunk/lib/Sema/TreeTransform.h
cfe/trunk/test/SemaObjC/typo-correction.m
Modified: cfe/trunk/lib/Sema/TreeTransform.h
URL:
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/TreeTransform.h?rev=243387&r1=243386&r2=243387&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/TreeTransform.h (original)
+++ cfe/trunk/lib/Sema/TreeTransform.h Tue Jul 28 01:12:24 2015
@@ -2657,20 +2657,18 @@ public:
ExprResult RebuildObjCMessageExpr(SourceLocation SuperLoc,
Selector Sel,
ArrayRef<SourceLocation> SelectorLocs,
+ QualType SuperType,
ObjCMethodDecl *Method,
SourceLocation LBracLoc,
MultiExprArg Args,
SourceLocation RBracLoc) {
- ObjCInterfaceDecl *Class = Method->getClassInterface();
- QualType ReceiverTy = SemaRef.Context.getObjCInterfaceType(Class);
-
return Method->isInstanceMethod() ? SemaRef.BuildInstanceMessage(nullptr,
- ReceiverTy,
+ SuperType,
SuperLoc,
Sel, Method, LBracLoc, SelectorLocs,
RBracLoc, Args)
: SemaRef.BuildClassMessage(nullptr,
- ReceiverTy,
+ SuperType,
SuperLoc,
Sel, Method, LBracLoc, SelectorLocs,
RBracLoc, Args);
@@ -10348,6 +10346,7 @@ TreeTransform<Derived>::TransformObjCMes
return getDerived().RebuildObjCMessageExpr(E->getSuperLoc(),
E->getSelector(),
SelLocs,
+ E->getReceiverType(),
E->getMethodDecl(),
E->getLeftLoc(),
Args,
Modified: cfe/trunk/test/SemaObjC/typo-correction.m
URL:
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/typo-correction.m?rev=243387&r1=243386&r2=243387&view=diff
==============================================================================
--- cfe/trunk/test/SemaObjC/typo-correction.m (original)
+++ cfe/trunk/test/SemaObjC/typo-correction.m Tue Jul 28 01:12:24 2015
@@ -1,10 +1,16 @@
// RUN: %clang_cc1 %s -verify -fsyntax-only
-@interface B
+@protocol P
+-(id)description;
+@end
+
+@interface B<P>
@property int x;
@end
-@interface S : B
+@interface S : B {
+ id _someivar; // expected-note {{here}}
+}
@end
// Spell-checking 'undefined' is ok.
@@ -12,9 +18,13 @@ undefined var; // expected-error {{unkno
typedef int super1;
@implementation S
--(void)foo {
+-(void)foo:(id)p1 other:(id)p2 {
// Spell-checking 'super' is not ok.
super.x = 0;
self.x = 0;
}
+
+-(void)test {
+ [self foo:[super description] other:someivar]; // expected-error {{use of
undeclared identifier 'someivar'; did you mean '_someivar'?}}
+}
@end
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits