summaryrefslogtreecommitdiffstats
path: root/clang/test/Modules/Inputs
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2015-03-26 04:09:53 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2015-03-26 04:09:53 +0000
commit65ebb4ac8a7119a16e5a00b075e5b382fd4e434c (patch)
treeaba5d66b22388b22c9c2f62df8fd03f0ecacfcb1 /clang/test/Modules/Inputs
parente972c3622113feaeaf4c1a7c8a60d193c385cb06 (diff)
downloadbcm5719-llvm-65ebb4ac8a7119a16e5a00b075e5b382fd4e434c.tar.gz
bcm5719-llvm-65ebb4ac8a7119a16e5a00b075e5b382fd4e434c.zip
[modules] If we reach a definition of a class for which we already have a
non-visible definition, skip the new definition and make the old one visible instead of trying to parse it again and failing horribly. C++'s ODR allows us to assume that the two definitions are identical. llvm-svn: 233250
Diffstat (limited to 'clang/test/Modules/Inputs')
-rw-r--r--clang/test/Modules/Inputs/submodules-merge-defs/defs.h6
-rw-r--r--clang/test/Modules/Inputs/submodules-merge-defs/empty.h0
-rw-r--r--clang/test/Modules/Inputs/submodules-merge-defs/import-and-redefine.h5
-rw-r--r--clang/test/Modules/Inputs/submodules-merge-defs/module.modulemap11
-rw-r--r--clang/test/Modules/Inputs/submodules-merge-defs/use-defs.h1
5 files changed, 23 insertions, 0 deletions
diff --git a/clang/test/Modules/Inputs/submodules-merge-defs/defs.h b/clang/test/Modules/Inputs/submodules-merge-defs/defs.h
new file mode 100644
index 00000000000..1c866b55aad
--- /dev/null
+++ b/clang/test/Modules/Inputs/submodules-merge-defs/defs.h
@@ -0,0 +1,6 @@
+struct A {};
+class B {
+ struct Inner1 {};
+ struct Inner2;
+};
+struct B::Inner2 : Inner1 {};
diff --git a/clang/test/Modules/Inputs/submodules-merge-defs/empty.h b/clang/test/Modules/Inputs/submodules-merge-defs/empty.h
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/clang/test/Modules/Inputs/submodules-merge-defs/empty.h
diff --git a/clang/test/Modules/Inputs/submodules-merge-defs/import-and-redefine.h b/clang/test/Modules/Inputs/submodules-merge-defs/import-and-redefine.h
new file mode 100644
index 00000000000..8d695bc45f4
--- /dev/null
+++ b/clang/test/Modules/Inputs/submodules-merge-defs/import-and-redefine.h
@@ -0,0 +1,5 @@
+// Trigger import of definitions, but don't make them visible.
+#include "empty.h"
+
+// Now parse the definitions again.
+#include "defs.h"
diff --git a/clang/test/Modules/Inputs/submodules-merge-defs/module.modulemap b/clang/test/Modules/Inputs/submodules-merge-defs/module.modulemap
new file mode 100644
index 00000000000..5c7ee8a89ad
--- /dev/null
+++ b/clang/test/Modules/Inputs/submodules-merge-defs/module.modulemap
@@ -0,0 +1,11 @@
+module "stuff" {
+ textual header "defs.h"
+ module "empty" { header "empty.h" }
+ module "use" { header "use-defs.h" }
+}
+
+module "redef" {
+ header "import-and-redefine.h"
+ // Do not re-export stuff.use
+ use "stuff"
+}
diff --git a/clang/test/Modules/Inputs/submodules-merge-defs/use-defs.h b/clang/test/Modules/Inputs/submodules-merge-defs/use-defs.h
new file mode 100644
index 00000000000..31c69c6a447
--- /dev/null
+++ b/clang/test/Modules/Inputs/submodules-merge-defs/use-defs.h
@@ -0,0 +1 @@
+#include "defs.h"
OpenPOWER on IntegriCloud