]> granicus.if.org Git - clang/commitdiff
fix the second part of rdar://8366474 - clang fails to parse ObjC selectors with...
authorChris Lattner <sabre@nondot.org>
Sat, 26 Mar 2011 18:11:38 +0000 (18:11 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 26 Mar 2011 18:11:38 +0000 (18:11 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@128344 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Parse/ParseObjc.cpp
test/Parser/selector-1.m

index d17e517b1f03d88ddbc6059f10e9db8097aaafb9..b42cf9f0ae11ce229264051054df160291cf3910 100644 (file)
@@ -2350,7 +2350,7 @@ ExprResult Parser::ParseObjCSelectorExpression(SourceLocation AtLoc) {
         return ExprError(Diag(Tok, diag::err_expected_colon));
 
       ++nColons;
-      ConsumeToken(); // Eat the ':'.
+      ConsumeToken(); // Eat the ':' or '::'.
       if (Tok.is(tok::r_paren))
         break;
       
@@ -2366,7 +2366,7 @@ ExprResult Parser::ParseObjCSelectorExpression(SourceLocation AtLoc) {
       SourceLocation Loc;
       SelIdent = ParseObjCSelectorPiece(Loc);
       KeyIdents.push_back(SelIdent);
-      if (!SelIdent && Tok.isNot(tok::colon))
+      if (!SelIdent && Tok.isNot(tok::colon) && Tok.isNot(tok::coloncolon))
         break;
     }
   }
index 0f35ce79b20fb5d6db7f52bfbcc8fba82d152e92..5ba2da9931cf8d0d6fc17b1165fe99e990472f60 100644 (file)
@@ -1,14 +1,20 @@
 // RUN: %clang_cc1 -fsyntax-only -verify %s 
+// RUN: %clang_cc1 -x objective-c++ -fsyntax-only -verify %s 
 
+// rdar://8366474
 int main() {
- SEL s = @selector(retain);
- SEL s1 = @selector(meth1:);
- SEL s2 = @selector(retainArgument::);
- SEL s3 = @selector(retainArgument:::::);
- SEL s4 = @selector(retainArgument:with:);
- SEL s5 = @selector(meth1:with:with:);
- SEL s6 = @selector(getEnum:enum:bool:);
- SEL s7 = @selector(char:float:double:unsigned:short:long:);
-
- SEL s9 = @selector(:enum:bool:);
+  SEL s = @selector(retain);
+  SEL s1 = @selector(meth1:);
+  SEL s2 = @selector(retainArgument::);
+  SEL s3 = @selector(retainArgument:::::);
+  SEL s4 = @selector(retainArgument:with:);
+  SEL s5 = @selector(meth1:with:with:);
+  SEL s6 = @selector(getEnum:enum:bool:);
+  SEL s7 = @selector(char:float:double:unsigned:short:long:);
+  SEL s9 = @selector(:enum:bool:);
+  
+  (void) @selector(foo:);
+  (void) @selector(foo::);
+  (void) @selector(foo:::);
+  (void) @selector(foo::::);
 }