diff options
Diffstat (limited to 'clang/test')
5 files changed, 15 insertions, 10 deletions
diff --git a/clang/test/Modules/Inputs/submodules-merge-defs/defs.h b/clang/test/Modules/Inputs/submodules-merge-defs/defs.h index ad3711f073f..b98cbc3a764 100644 --- a/clang/test/Modules/Inputs/submodules-merge-defs/defs.h +++ b/clang/test/Modules/Inputs/submodules-merge-defs/defs.h @@ -31,7 +31,7 @@ template<typename T> struct F { template<typename T> int F<T>::f() { return 0; } template<typename T> template<typename U> int F<T>::g() { return 0; } template<typename T> int F<T>::n = 0; -template<> template<typename U> int F<char>::g() { return 0; } +//template<> template<typename U> int F<char>::g() { return 0; } // FIXME: Re-enable this once we support merging member specializations. template<> struct F<void> { int h(); }; inline int F<void>::h() { return 0; } template<typename T> struct F<T *> { int i(); }; diff --git a/clang/test/Modules/Inputs/submodules-merge-defs/module.modulemap b/clang/test/Modules/Inputs/submodules-merge-defs/module.modulemap index f8ae60fe44f..3b5493e2b8b 100644 --- a/clang/test/Modules/Inputs/submodules-merge-defs/module.modulemap +++ b/clang/test/Modules/Inputs/submodules-merge-defs/module.modulemap @@ -2,6 +2,7 @@ module "stuff" { textual header "defs.h" module "empty" { header "empty.h" } module "use" { header "use-defs.h" } + module "use-2" { requires use_defs_twice header "use-defs-2.h" } } module "redef" { diff --git a/clang/test/Modules/Inputs/submodules-merge-defs/use-defs-2.h b/clang/test/Modules/Inputs/submodules-merge-defs/use-defs-2.h new file mode 100644 index 00000000000..31c69c6a447 --- /dev/null +++ b/clang/test/Modules/Inputs/submodules-merge-defs/use-defs-2.h @@ -0,0 +1 @@ +#include "defs.h" diff --git a/clang/test/Modules/module-private.cpp b/clang/test/Modules/module-private.cpp index 9213a0f20cb..478d36dd4d5 100644 --- a/clang/test/Modules/module-private.cpp +++ b/clang/test/Modules/module-private.cpp @@ -14,7 +14,7 @@ void test() { int test_broken() { HiddenStruct hidden; // \ // expected-error{{must use 'struct' tag to refer to type 'HiddenStruct' in this scope}} \ - // expected-error{{definition of 'struct HiddenStruct' must be imported}} + // expected-error{{definition of 'HiddenStruct' must be imported}} // expected-note@Inputs/module_private_left.h:3 {{previous definition is here}} Integer i; // expected-error{{unknown type name 'Integer'}} diff --git a/clang/test/Modules/submodules-merge-defs.cpp b/clang/test/Modules/submodules-merge-defs.cpp index e942335151e..52b12ef850a 100644 --- a/clang/test/Modules/submodules-merge-defs.cpp +++ b/clang/test/Modules/submodules-merge-defs.cpp @@ -4,6 +4,7 @@ // RUN: %clang_cc1 -x c++ -std=c++11 -fmodules-cache-path=%t -fmodules -I %S/Inputs/submodules-merge-defs %s -verify -fno-modules-error-recovery -fmodules-local-submodule-visibility -DTEXTUAL // RUN: %clang_cc1 -x c++ -std=c++11 -fmodules-cache-path=%t -fmodules -I %S/Inputs/submodules-merge-defs %s -verify -fno-modules-error-recovery -fmodules-local-submodule-visibility // RUN: %clang_cc1 -x c++ -std=c++11 -fmodules-cache-path=%t -fmodule-maps -I %S/Inputs/submodules-merge-defs %s -verify -fno-modules-error-recovery -fmodules-local-submodule-visibility -DTEXTUAL -DEARLY_INDIRECT_INCLUDE +// RUN: %clang_cc1 -x c++ -std=c++11 -fmodules-cache-path=%t -fmodules -I %S/Inputs/submodules-merge-defs %s -verify -fno-modules-error-recovery -fmodules-local-submodule-visibility -fmodule-feature use_defs_twice -DIMPORT_USE_2 // Trigger import of definitions, but don't make them visible. #include "empty.h" @@ -11,7 +12,14 @@ #include "indirect.h" #endif -A pre_a; // expected-error {{must be imported}} expected-error {{must use 'struct'}} +A pre_a; // expected-error {{must use 'struct'}} +#ifdef IMPORT_USE_2 +// expected-error-re@-2 {{must be imported from one of {{.*}}stuff.use{{.*}}stuff.use-2}} +#elif EARLY_INDIRECT_INCLUDE +// expected-error@-4 {{must be imported from module 'merged-defs'}} +#else +// expected-error@-6 {{must be imported from module 'stuff.use'}} +#endif // expected-note@defs.h:1 +{{here}} // expected-note@defs.h:2 +{{here}} int pre_use_a = use_a(pre_a); // expected-error {{'A' must be imported}} expected-error {{'use_a' must be imported}} @@ -46,6 +54,8 @@ J<> pre_j; // expected-error {{must be imported}} expected-error {{too few}} // Make definitions from second module visible. #ifdef TEXTUAL #include "import-and-redefine.h" +#elif defined IMPORT_USE_2 +#include "use-defs-2.h" #else #include "merged-defs.h" #endif @@ -61,13 +71,6 @@ int post_use_dx = use_dx(post_dx); int post_e = E(0); int post_ff = F<char>().f(); int post_fg = F<char>().g<int>(); -#ifdef EARLY_INDIRECT_INCLUDE -// FIXME: Properly track the owning module for a member specialization. -// expected-error@defs.h:34 {{redefinition}} -// expected-note@defs.h:34 {{previous definition}} -// expected-error@-5 {{no matching member function}} -// expected-note@defs.h:34 {{substitution failure}} -#endif J<> post_j; template<typename T, int N, template<typename> class K> struct J; J<> post_j2; |