mirror of
https://github.com/intel/llvm.git
synced 2026-02-08 08:57:43 +08:00
Check that the namespace alias doesn't conflict with a previous declaration in this scope.
llvm-svn: 67921
This commit is contained in:
@@ -1675,12 +1675,24 @@ void Sema::PushUsingDirective(Scope *S, UsingDirectiveDecl *UDir) {
|
||||
S->PushUsingDirective(UDir);
|
||||
}
|
||||
|
||||
Sema::DeclTy *Sema::ActOnNamespaceAliasDef(Scope *CurScope,
|
||||
Sema::DeclTy *Sema::ActOnNamespaceAliasDef(Scope *S,
|
||||
SourceLocation AliasLoc,
|
||||
IdentifierInfo *Alias,
|
||||
const CXXScopeSpec &SS,
|
||||
SourceLocation NamespaceLoc,
|
||||
IdentifierInfo *NamespaceName) {
|
||||
|
||||
// Check if we have a previous declaration with the same name.
|
||||
if (NamedDecl *PrevDecl = LookupName(S, Alias, LookupOrdinaryName)) {
|
||||
// FIXME: If this is a namespace alias decl, and it points to the same
|
||||
// namespace, we shouldn't warn.
|
||||
unsigned DiagID = isa<NamespaceDecl>(PrevDecl) ? diag::err_redefinition :
|
||||
diag::err_redefinition_different_kind;
|
||||
Diag(AliasLoc, DiagID) << Alias;
|
||||
Diag(PrevDecl->getLocation(), diag::note_previous_definition);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
11
clang/test/SemaCXX/namespace-alias.cpp
Normal file
11
clang/test/SemaCXX/namespace-alias.cpp
Normal file
@@ -0,0 +1,11 @@
|
||||
// RUN: clang-cc -fsyntax-only -verify %s
|
||||
|
||||
namespace N { };
|
||||
|
||||
namespace A = N;
|
||||
|
||||
int B; // expected-note {{previous definition is here}}
|
||||
namespace B = N; // expected-error {{redefinition of 'B' as different kind of symbol}}
|
||||
|
||||
namespace C { } // expected-note {{previous definition is here}}
|
||||
namespace C = N; // expected-error {{redefinition of 'C'}}
|
||||
Reference in New Issue
Block a user