From: John McCall Date: Mon, 1 Mar 2010 18:20:46 +0000 (+0000) Subject: Don't infinite-loop if TryAnnotateCXXScopeToken fails to annotate but doesn't X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=2e0a715595a21adeb7172995df59317741301aa3;p=clang Don't infinite-loop if TryAnnotateCXXScopeToken fails to annotate but doesn't signal an error. This can happen even when the current token is '::' if this is a ::new or ::delete expression. This was an oversight in my recent parser refactor; fixes PR 5825. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@97462 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Parse/ParseDecl.cpp b/lib/Parse/ParseDecl.cpp index 277d69f2cd..4405dcb974 100644 --- a/lib/Parse/ParseDecl.cpp +++ b/lib/Parse/ParseDecl.cpp @@ -865,6 +865,8 @@ void Parser::ParseDeclarationSpecifiers(DeclSpec &DS, DS.SetTypeSpecError(); goto DoneWithDeclSpec; } + if (Tok.is(tok::coloncolon)) // ::new or ::delete + goto DoneWithDeclSpec; continue; case tok::annot_cxxscope: { diff --git a/test/Parser/cxx-decl.cpp b/test/Parser/cxx-decl.cpp index f37604cc54..c8f2c0b769 100644 --- a/test/Parser/cxx-decl.cpp +++ b/test/Parser/cxx-decl.cpp @@ -58,3 +58,7 @@ struct test4 { int y; int z // expected-error {{expected ';' at end of declaration list}} }; + +// PR5825 +struct test5 {}; +::new(static_cast(0)) test5; // expected-error {{expected unqualified-id}}