diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2015-03-26 04:09:53 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2015-03-26 04:09:53 +0000 |
commit | 65ebb4ac8a7119a16e5a00b075e5b382fd4e434c (patch) | |
tree | aba5d66b22388b22c9c2f62df8fd03f0ecacfcb1 /clang/test/Modules/Inputs | |
parent | e972c3622113feaeaf4c1a7c8a60d193c385cb06 (diff) | |
download | bcm5719-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')
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" |