diff options
author | John McCall <rjmccall@apple.com> | 2010-11-23 22:03:51 +0000 |
---|---|---|
committer | John McCall <rjmccall@apple.com> | 2010-11-23 22:03:51 +0000 |
commit | fe4ea55700c806493bebbf7bbfe07ce4b7339a3e (patch) | |
tree | 5befa5f4e99a34da478f463a683d4d1730d7963f | |
parent | b2b93c12d768cfdeb21909f734b04ccb82d75da2 (diff) |
Redeclarations of using declarations are not okay in function scopes.
Not sure what I was thinking before.
Fixes PR8668.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@120063 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Sema/SemaDeclCXX.cpp | 4 | ||||
-rw-r--r-- | test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p8.cpp | 15 |
2 files changed, 14 insertions, 5 deletions
diff --git a/lib/Sema/SemaDeclCXX.cpp b/lib/Sema/SemaDeclCXX.cpp index 235b41e342..ad8b8695cc 100644 --- a/lib/Sema/SemaDeclCXX.cpp +++ b/lib/Sema/SemaDeclCXX.cpp @@ -3961,8 +3961,8 @@ bool Sema::CheckUsingDeclRedeclaration(SourceLocation UsingLoc, // repeatedly where (and only where) multiple declarations are // allowed. // - // That's in non-member contexts. - if (!CurContext->getRedeclContext()->isRecord()) + // That's in file contexts. + if (CurContext->isFileContext()) return false; NestedNameSpecifier *Qual diff --git a/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p8.cpp b/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p8.cpp index 466097171c..5ba22c8419 100644 --- a/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p8.cpp +++ b/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p8.cpp @@ -82,7 +82,7 @@ namespace test2 { template struct Derived<int>; // expected-note {{in instantiation of template class}} } -// Redeclarations are okay in a function. +// PR8668: redeclarations are not okay in a function. namespace test3 { namespace N { int f(int); @@ -90,9 +90,18 @@ namespace test3 { } void g() { + using N::f; // expected-note {{previous using declaration}} + using N::f; // expected-error {{redeclaration of using decl}} + using N::type; // expected-note {{previous using declaration}} + using N::type; // expected-error {{redeclaration of using decl}} + } + + void h() { using N::f; - using N::f; - using N::type; using N::type; + { + using N::f; + using N::type; + } } } |