diff options
author | Bruno Cardoso Lopes <bruno.cardoso@gmail.com> | 2018-05-02 02:25:03 +0000 |
---|---|---|
committer | Bruno Cardoso Lopes <bruno.cardoso@gmail.com> | 2018-05-02 02:25:03 +0000 |
commit | 22d97065d358d977eab163c6e07540072eea2642 (patch) | |
tree | 2d4adec73c8c98cb5ee04a975c81d6a7cd2ed52d /clang/test/Modules/Inputs | |
parent | a0e3ae4ce01d07e575d1ab8966f78c835039ef09 (diff) | |
download | bcm5719-llvm-22d97065d358d977eab163c6e07540072eea2642.tar.gz bcm5719-llvm-22d97065d358d977eab163c6e07540072eea2642.zip |
[Modules] Allow @import to reach submodules in private module maps
A @import targeting a top level module from a private module map file
(@import Foo_Private), would fail if there's any submodule declaration
around (module Foo.SomeSub) in the same private module map.
This happens because compileModuleImpl, when building Foo_Private, will
start with the private module map and will not parse the public one,
which leads to unsuccessful parsing of Foo.SomeSub, since top level Foo
was never parsed.
Declaring other submodules in the private module map is not common and
should usually be avoided, but it shouldn't fail to build. Canonicalize
compileModuleImpl to always look at the public module first, so that all
necessary information is available when parsing the private one.
rdar://problem/39822328
llvm-svn: 331322
Diffstat (limited to 'clang/test/Modules/Inputs')
5 files changed, 11 insertions, 0 deletions
diff --git a/clang/test/Modules/Inputs/submodule-in-private-mmap/A.framework/Headers/A.h b/clang/test/Modules/Inputs/submodule-in-private-mmap/A.framework/Headers/A.h new file mode 100644 index 00000000000..975f1f0437b --- /dev/null +++ b/clang/test/Modules/Inputs/submodule-in-private-mmap/A.framework/Headers/A.h @@ -0,0 +1 @@ +// A.h diff --git a/clang/test/Modules/Inputs/submodule-in-private-mmap/A.framework/Headers/SomeSub.h b/clang/test/Modules/Inputs/submodule-in-private-mmap/A.framework/Headers/SomeSub.h new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/clang/test/Modules/Inputs/submodule-in-private-mmap/A.framework/Headers/SomeSub.h diff --git a/clang/test/Modules/Inputs/submodule-in-private-mmap/A.framework/Modules/module.modulemap b/clang/test/Modules/Inputs/submodule-in-private-mmap/A.framework/Modules/module.modulemap new file mode 100644 index 00000000000..afa48392e94 --- /dev/null +++ b/clang/test/Modules/Inputs/submodule-in-private-mmap/A.framework/Modules/module.modulemap @@ -0,0 +1,3 @@ +framework module A { + header "A.h" +} diff --git a/clang/test/Modules/Inputs/submodule-in-private-mmap/A.framework/Modules/module.private.modulemap b/clang/test/Modules/Inputs/submodule-in-private-mmap/A.framework/Modules/module.private.modulemap new file mode 100644 index 00000000000..1dbd9fb8096 --- /dev/null +++ b/clang/test/Modules/Inputs/submodule-in-private-mmap/A.framework/Modules/module.private.modulemap @@ -0,0 +1,7 @@ +framework module A_Private { + header "APrivate.h" +} + +module A.SomeSub { + header "SomeSub.h" +} diff --git a/clang/test/Modules/Inputs/submodule-in-private-mmap/A.framework/PrivateHeaders/APrivate.h b/clang/test/Modules/Inputs/submodule-in-private-mmap/A.framework/PrivateHeaders/APrivate.h new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/clang/test/Modules/Inputs/submodule-in-private-mmap/A.framework/PrivateHeaders/APrivate.h |