summaryrefslogtreecommitdiffstats
path: root/clang/test/Modules/submodules-merge-defs.cpp
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2015-06-15 20:15:48 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2015-06-15 20:15:48 +0000
commitf2b1eb9eb2fb25f5263a2280646cc154b6532602 (patch)
treebebed0f29ab3f166fa3d33adc555f411eac43f31 /clang/test/Modules/submodules-merge-defs.cpp
parent4223a1f81158534ce497768c491357086f389ff5 (diff)
downloadbcm5719-llvm-f2b1eb9eb2fb25f5263a2280646cc154b6532602.tar.gz
bcm5719-llvm-f2b1eb9eb2fb25f5263a2280646cc154b6532602.zip
[modules] Better support for redefinitions of an entity from the same module.
Support this across module save/reload and extend the 'missing import' diagnostics with a list of providing modules. llvm-svn: 239750
Diffstat (limited to 'clang/test/Modules/submodules-merge-defs.cpp')
-rw-r--r--clang/test/Modules/submodules-merge-defs.cpp19
1 files changed, 11 insertions, 8 deletions
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;
OpenPOWER on IntegriCloud