]> granicus.if.org Git - clang/commitdiff
Fixed a problem using property syntax on a 'super'
authorFariborz Jahanian <fjahanian@apple.com>
Wed, 8 Apr 2009 19:50:10 +0000 (19:50 +0000)
committerFariborz Jahanian <fjahanian@apple.com>
Wed, 8 Apr 2009 19:50:10 +0000 (19:50 +0000)
used as receiver.

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

lib/Parse/ParseObjc.cpp
test/SemaObjC/super-property-message-expr.m [new file with mode: 0644]

index 8a942c77027a08727e99a90daac0b2d1ece7b9e2..bac3f91d0af781fa6dc7f95f3f04ad3b2be9db55 100644 (file)
@@ -1449,9 +1449,11 @@ Parser::OwningExprResult Parser::ParseObjCMessageExpression() {
   // Parse receiver
   if (isTokObjCMessageIdentifierReceiver()) {
     IdentifierInfo *ReceiverName = Tok.getIdentifierInfo();
-    SourceLocation NameLoc = ConsumeToken();
-    return ParseObjCMessageExpressionBody(LBracLoc, NameLoc, ReceiverName,
-                                          ExprArg(Actions));
+    if (ReceiverName != Ident_super || GetLookAheadToken(1).isNot(tok::period)) {
+      SourceLocation NameLoc = ConsumeToken();
+      return ParseObjCMessageExpressionBody(LBracLoc, NameLoc, ReceiverName,
+                                            ExprArg(Actions));
+    }
   }
 
   OwningExprResult Res(ParseExpression());
diff --git a/test/SemaObjC/super-property-message-expr.m b/test/SemaObjC/super-property-message-expr.m
new file mode 100644 (file)
index 0000000..082d8bd
--- /dev/null
@@ -0,0 +1,21 @@
+// RUN: clang-cc  -fsyntax-only -verify %s
+
+@interface SStoreNodeInfo 
+
+@property(nonatomic,readonly,retain) id descriptionShort;
+
+- (id)stringByAppendingFormat:(int)format, ... ;
+
+@end
+
+@interface SStoreNodeInfo_iDisk : SStoreNodeInfo
+{
+@private
+ id _etag;
+}
+@end
+
+@implementation SStoreNodeInfo_iDisk
+- (id) X { return [super.descriptionShort stringByAppendingFormat:1, _etag]; }
+
+@end