aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>2010-06-22 11:30:04 +0000
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>2010-06-22 11:30:04 +0000
commit661c36b057d07c76c16fee95c01d96f3956265be (patch)
tree25d81a1d9edb8b346b6471b492be1722df28e933
parentf511ba6277d240bbee1064715da8362a6edee5f3 (diff)
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
-rw-r--r--lib/Parse/ParseExprCXX.cpp10
-rw-r--r--test/Parser/cxx-undeclared-identifier.cpp3
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}}