diff options
| -rw-r--r-- | clang/lib/Sema/SemaDeclCXX.cpp | 4 | ||||
| -rw-r--r-- | clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp | 4 | ||||
| -rw-r--r-- | clang/test/CXX/drs/dr6xx.cpp | 4 | ||||
| -rw-r--r-- | clang/test/CXX/temp/temp.param/p15-cxx0x.cpp | 2 | ||||
| -rw-r--r-- | clang/test/Modules/submodules-merge-defs.cpp | 7 | ||||
| -rw-r--r-- | clang/test/SemaCXX/alias-template.cpp | 4 | ||||
| -rw-r--r-- | clang/test/SemaTemplate/alias-templates.cpp | 6 |
7 files changed, 21 insertions, 10 deletions
diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index 22334ab253c..e161c87f173 100644 --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -8885,9 +8885,7 @@ Decl *Sema::ActOnAliasDeclaration(Scope *S, NewND = NewTD; } - if (!Redeclaration) - PushOnScopeChains(NewND, S); - + PushOnScopeChains(NewND, S); ActOnDocumentableDecl(NewND); return NewND; } diff --git a/clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp b/clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp index 20b5104f83b..8c6f6e5ddc7 100644 --- a/clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp +++ b/clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp @@ -38,8 +38,8 @@ namespace VariableLengthArrays { using T = int[n]; // expected-error {{variable length array declaration not allowed at file scope}} const int m = 42; - using U = int[m]; // expected-note {{previous definition}} - using U = int[42]; // ok + using U = int[m]; + using U = int[42]; // expected-note {{previous definition}} using U = int; // expected-error {{type alias redefinition with different types ('int' vs 'int [42]')}} void f() { diff --git a/clang/test/CXX/drs/dr6xx.cpp b/clang/test/CXX/drs/dr6xx.cpp index 988c8f43011..1d37a6d3e80 100644 --- a/clang/test/CXX/drs/dr6xx.cpp +++ b/clang/test/CXX/drs/dr6xx.cpp @@ -146,9 +146,9 @@ namespace dr616 { // dr616: no #if __cplusplus >= 201103L struct S { int n; } s; // FIXME: These should all be 'int &&' - using T = decltype(S().n); // expected-note 2{{previous}} + using T = decltype(S().n); using T = decltype(static_cast<S&&>(s).n); - using T = decltype(S().*&S::n); + using T = decltype(S().*&S::n); // expected-note 2{{previous}} using T = decltype(static_cast<S&&>(s).*&S::n); // expected-error {{different type}} using T = int&&; // expected-error {{different type}} #endif diff --git a/clang/test/CXX/temp/temp.param/p15-cxx0x.cpp b/clang/test/CXX/temp/temp.param/p15-cxx0x.cpp index ade192b3efa..667152da1cb 100644 --- a/clang/test/CXX/temp/temp.param/p15-cxx0x.cpp +++ b/clang/test/CXX/temp/temp.param/p15-cxx0x.cpp @@ -102,10 +102,10 @@ using D1 = drop<3, int, char, double, long>::type; using D1 = types<long>; using T2 = take<4, int, char, double, long>::type; // expected-note {{previous}} -using T2 = types<int, char, double, long>; // FIXME: Desguar the types on the RHS in this diagnostic. // desired-error {{'types<void, void, void, void>' vs 'types<int, char, double, long>'}} using T2 = types<void, void, void, void>; // expected-error {{'types<void, void, void, void>' vs 'types<typename inner<_>::type, typename inner<_>::type, typename inner<_>::type, typename inner<_>::type>'}} +using T2 = types<int, char, double, long>; using D2 = drop<4, int, char, double, long>::type; using D2 = types<>; diff --git a/clang/test/Modules/submodules-merge-defs.cpp b/clang/test/Modules/submodules-merge-defs.cpp index 23d1f5cfb12..4ab822a022b 100644 --- a/clang/test/Modules/submodules-merge-defs.cpp +++ b/clang/test/Modules/submodules-merge-defs.cpp @@ -58,6 +58,11 @@ G::A pre_ga // expected-error +{{must be imported}} decltype(G::h) pre_gh = G::h; // expected-error +{{must be imported}} // expected-note@defs.h:51 +{{here}} +int pre_h = H(); // expected-error +{{must be imported}} +// expected-note@defs.h:56 +{{here}} +using pre_i = I<>; // expected-error +{{must be imported}} +// expected-note@defs.h:57 +{{here}} + J<> pre_j; // expected-error {{declaration of 'J' must be imported}} #ifdef IMPORT_USE_2 // expected-error-re@-2 {{default argument of 'J' must be imported from one of {{.*}}stuff.use{{.*}}stuff.use-2}} @@ -99,6 +104,8 @@ int post_ff = F<char>().f(); int post_fg = F<char>().g<int>(); G::A post_ga = G::a; decltype(G::h) post_gh = G::h; +int post_h = H(); +using post_i = I<>; J<> post_j; template<typename T, int N, template<typename> class K> struct J; J<> post_j2; diff --git a/clang/test/SemaCXX/alias-template.cpp b/clang/test/SemaCXX/alias-template.cpp index bcfe428c69d..b6256103ef8 100644 --- a/clang/test/SemaCXX/alias-template.cpp +++ b/clang/test/SemaCXX/alias-template.cpp @@ -35,8 +35,8 @@ namespace VariableLengthArrays { template<typename Z> using T = int[n]; // expected-error {{variable length array declaration not allowed at file scope}} const int m = 42; - template<typename Z> using U = int[m]; // expected-note {{previous definition}} - template<typename Z> using U = int[42]; // ok + template<typename Z> using U = int[m]; + template<typename Z> using U = int[42]; // expected-note {{previous definition}} template<typename Z> using U = int; // expected-error {{type alias template redefinition with different types ('int' vs 'int [42]')}} } diff --git a/clang/test/SemaTemplate/alias-templates.cpp b/clang/test/SemaTemplate/alias-templates.cpp index 1849ff64026..b7078353ff1 100644 --- a/clang/test/SemaTemplate/alias-templates.cpp +++ b/clang/test/SemaTemplate/alias-templates.cpp @@ -221,3 +221,9 @@ namespace PR14858 { template<typename ...T, typename ...U> void h(X<T...> &) {} template<typename ...T, typename ...U> void h(X<U...> &) {} // ok, different } + +namespace redecl { + template<typename> using A = int; + template<typename = void> using A = int; + A<> a; // ok +} |

