summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2010-03-23 15:26:55 +0000
committerDouglas Gregor <dgregor@apple.com>2010-03-23 15:26:55 +0000
commitb525ef87fc486030af821ea957b38d63b1b78899 (patch)
treed068d2272cce0dd43875c81b53cf74e162abeb5a
parent274fc82289223f8b15f9621f4459428ae2812803 (diff)
downloadbcm5719-llvm-b525ef87fc486030af821ea957b38d63b1b78899.tar.gz
bcm5719-llvm-b525ef87fc486030af821ea957b38d63b1b78899.zip
When recovering from a qualified typedef name, don't clear out the
DeclContext because we don't want a NULL DeclContext. Instead, use the current context. llvm-svn: 99281
-rw-r--r--clang/lib/Sema/SemaDecl.cpp3
-rw-r--r--clang/test/SemaCXX/qual-id-test.cpp9
2 files changed, 11 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp
index aaf39ef1f94..bf92ef829be 100644
--- a/clang/lib/Sema/SemaDecl.cpp
+++ b/clang/lib/Sema/SemaDecl.cpp
@@ -2131,7 +2131,8 @@ Sema::ActOnTypedefDeclarator(Scope* S, Declarator& D, DeclContext* DC,
<< D.getCXXScopeSpec().getRange();
D.setInvalidType();
// Pretend we didn't see the scope specifier.
- DC = 0;
+ DC = CurContext;
+ Previous.clear();
}
if (getLangOptions().CPlusPlus) {
diff --git a/clang/test/SemaCXX/qual-id-test.cpp b/clang/test/SemaCXX/qual-id-test.cpp
index 54d41b81cab..4846e72e592 100644
--- a/clang/test/SemaCXX/qual-id-test.cpp
+++ b/clang/test/SemaCXX/qual-id-test.cpp
@@ -138,3 +138,12 @@ struct a {
a a;
int a::sa = a.a; // expected-error {{invalid use of nonstatic data member 'a'}}
+
+
+namespace PR6645 {
+ typedef int foo;
+ namespace Inner {
+ typedef int PR6645::foo; // expected-error{{typedef declarator cannot be qualified}} \
+ // expected-error{{definition or redeclaration of 'foo' not in a namespace enclosing 'PR6645'}}
+ }
+}
OpenPOWER on IntegriCloud