[cfe-commits] r128344 - in /cfe/trunk: lib/Parse/ParseObjc.cpp test/Parser/selector-1.m

Chris Lattner sabre at nondot.org
Sat Mar 26 11:11:39 PDT 2011


Author: lattner
Date: Sat Mar 26 13:11:38 2011
New Revision: 128344

URL: http://llvm.org/viewvc/llvm-project?rev=128344&view=rev
Log:
fix the second part of rdar://8366474 - clang fails to parse ObjC selectors with '::', when :: isn't the first part of the selector.



Modified:
    cfe/trunk/lib/Parse/ParseObjc.cpp
    cfe/trunk/test/Parser/selector-1.m

Modified: cfe/trunk/lib/Parse/ParseObjc.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseObjc.cpp?rev=128344&r1=128343&r2=128344&view=diff
==============================================================================
--- cfe/trunk/lib/Parse/ParseObjc.cpp (original)
+++ cfe/trunk/lib/Parse/ParseObjc.cpp Sat Mar 26 13:11:38 2011
@@ -2350,7 +2350,7 @@
         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 @@
       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;
     }
   }

Modified: cfe/trunk/test/Parser/selector-1.m
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Parser/selector-1.m?rev=128344&r1=128343&r2=128344&view=diff
==============================================================================
--- cfe/trunk/test/Parser/selector-1.m (original)
+++ cfe/trunk/test/Parser/selector-1.m Sat Mar 26 13:11:38 2011
@@ -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::::);
 }





More information about the cfe-commits mailing list