From 661c36b057d07c76c16fee95c01d96f3956265be Mon Sep 17 00:00:00 2001 From: Argyrios Kyrtzidis Date: Tue, 22 Jun 2010 11:30:04 +0000 Subject: [PATCH] Fix PR7180. For void f( a::b::c ); we would cache the tokens "a::b::" but then we would try to annotate them using the range "a::". Before annotating them with the (invalid) C++ scope spec, set it to the range of "a::b::". git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@106536 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Parse/ParseExprCXX.cpp | 10 ++++------ test/Parser/cxx-undeclared-identifier.cpp | 3 +++ 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/lib/Parse/ParseExprCXX.cpp b/lib/Parse/ParseExprCXX.cpp index dd74c4e998..08357e63f6 100644 --- a/lib/Parse/ParseExprCXX.cpp +++ b/lib/Parse/ParseExprCXX.cpp @@ -278,12 +278,10 @@ bool Parser::ParseOptionalCXXScopeSpecifier(CXXScopeSpec &SS, HasScopeSpecifier = true; } - if (SS.isInvalid()) - continue; - - SS.setScopeRep( - Actions.ActOnCXXNestedNameSpecifier(CurScope, SS, IdLoc, CCLoc, II, - ObjectType, EnteringContext)); + if (!SS.isInvalid()) + SS.setScopeRep( + Actions.ActOnCXXNestedNameSpecifier(CurScope, SS, IdLoc, CCLoc, II, + ObjectType, EnteringContext)); SS.setEndLoc(CCLoc); continue; } diff --git a/test/Parser/cxx-undeclared-identifier.cpp b/test/Parser/cxx-undeclared-identifier.cpp index 36d8f7a653..f15deabc6d 100644 --- a/test/Parser/cxx-undeclared-identifier.cpp +++ b/test/Parser/cxx-undeclared-identifier.cpp @@ -1,5 +1,8 @@ // RUN: %clang_cc1 -fsyntax-only -pedantic -verify %s +// PR7180 +int f(a::b::c); // expected-error {{use of undeclared identifier 'a'}} + class Foo::Bar { // expected-error {{use of undeclared identifier 'Foo'}} \ // expected-note {{to match this '{'}} \ // expected-error {{expected ';' after class}} -- 2.40.0