forked from OSchip/llvm-project
fix the second part of rdar://8366474 - clang fails to parse ObjC selectors with '::', when :: isn't the first part of the selector.
llvm-svn: 128344
This commit is contained in:
parent
c85269fb40
commit
85222c6b2f
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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::::);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue