diff options
| author | Richard Smith <richard-llvm@metafoo.co.uk> | 2014-09-03 23:11:22 +0000 |
|---|---|---|
| committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2014-09-03 23:11:22 +0000 |
| commit | f463436d9c02deb870f2ecbba4a69a96f6f9b3d7 (patch) | |
| tree | 5810630f0ac6f5e0529de79d06c3179787871727 /clang/test | |
| parent | c6ab01eccae05aee4bae81a875a6eb88907247c5 (diff) | |
| download | bcm5719-llvm-f463436d9c02deb870f2ecbba4a69a96f6f9b3d7.tar.gz bcm5719-llvm-f463436d9c02deb870f2ecbba4a69a96f6f9b3d7.zip | |
[modules] Make NamespaceAliasDecl redeclarable, as it should be. This fixes
merging of namespace aliases across modules and improves source fidelity.
Incidentally also fixes PR20816.
llvm-svn: 217103
Diffstat (limited to 'clang/test')
| -rw-r--r-- | clang/test/Modules/Inputs/cxx-decls-imported.h | 3 | ||||
| -rw-r--r-- | clang/test/Modules/Inputs/cxx-decls-merged.h | 3 | ||||
| -rw-r--r-- | clang/test/Modules/cxx-decls.cpp | 2 | ||||
| -rw-r--r-- | clang/test/SemaCXX/namespace-alias.cpp | 6 |
4 files changed, 11 insertions, 3 deletions
diff --git a/clang/test/Modules/Inputs/cxx-decls-imported.h b/clang/test/Modules/Inputs/cxx-decls-imported.h index 691b374d0d8..8c1e74f17c3 100644 --- a/clang/test/Modules/Inputs/cxx-decls-imported.h +++ b/clang/test/Modules/Inputs/cxx-decls-imported.h @@ -44,3 +44,6 @@ typedef struct { } NameForLinkage2; auto name_for_linkage2_inner_a = NameForLinkage2::Inner(); typedef decltype(name_for_linkage2_inner_a) NameForLinkage2Inner; + +namespace Aliased { extern int a; } +namespace Alias = Aliased; diff --git a/clang/test/Modules/Inputs/cxx-decls-merged.h b/clang/test/Modules/Inputs/cxx-decls-merged.h index 7f2baf36ee9..86e81a9bb68 100644 --- a/clang/test/Modules/Inputs/cxx-decls-merged.h +++ b/clang/test/Modules/Inputs/cxx-decls-merged.h @@ -22,3 +22,6 @@ typedef struct { } NameForLinkage2; auto name_for_linkage2_inner_b = NameForLinkage2::Inner(); typedef decltype(name_for_linkage2_inner_b) NameForLinkage2Inner; + +namespace Aliased { extern int b; } +namespace Alias = Aliased; diff --git a/clang/test/Modules/cxx-decls.cpp b/clang/test/Modules/cxx-decls.cpp index 1fb550ba280..109306ed79d 100644 --- a/clang/test/Modules/cxx-decls.cpp +++ b/clang/test/Modules/cxx-decls.cpp @@ -46,6 +46,8 @@ int overrides_virtual_functions_test = void use_extern_c_function() { ExternCFunction(); } +int use_namespace_alias() { return Alias::a + Alias::b; } + @import cxx_decls_premerged; void use_extern_c_function_2() { ExternCFunction(); } diff --git a/clang/test/SemaCXX/namespace-alias.cpp b/clang/test/SemaCXX/namespace-alias.cpp index e18b58b4d44..63615ecbd35 100644 --- a/clang/test/SemaCXX/namespace-alias.cpp +++ b/clang/test/SemaCXX/namespace-alias.cpp @@ -35,12 +35,12 @@ namespace H { namespace A2 { } // These all point to A1. - namespace B = A1; // expected-note {{previous definition is here}} + namespace B = A1; namespace B = A1; namespace C = B; - namespace B = C; + namespace B = C; // expected-note {{previously defined as an alias for 'A1'}} - namespace B = A2; // expected-error {{redefinition of 'B' as different kind of symbol}} + namespace B = A2; // expected-error {{redefinition of 'B' as an alias for a different namespace}} } namespace I { |

