diff options
author | Daniel Jasper <djasper@google.com> | 2015-03-13 11:26:16 +0000 |
---|---|---|
committer | Daniel Jasper <djasper@google.com> | 2015-03-13 11:26:16 +0000 |
commit | b6ba46ef304b2294e477dc4a3f571f38fbd47113 (patch) | |
tree | 73b0c39c3d5ba54e572de94dfce9b9a07219facd | |
parent | 0deef9c3cbf4101b2a47d8663caf44294e587074 (diff) | |
download | bcm5719-llvm-b6ba46ef304b2294e477dc4a3f571f38fbd47113.tar.gz bcm5719-llvm-b6ba46ef304b2294e477dc4a3f571f38fbd47113.zip |
Make a module "use" also count as use of all its submodules
llvm-svn: 232159
-rw-r--r-- | clang/lib/Lex/ModuleMap.cpp | 8 | ||||
-rw-r--r-- | clang/test/Modules/Inputs/declare-use/module.map | 7 | ||||
-rw-r--r-- | clang/test/Modules/Inputs/declare-use/sub.h | 4 | ||||
-rw-r--r-- | clang/test/Modules/declare-use1.cpp | 3 |
4 files changed, 18 insertions, 4 deletions
diff --git a/clang/lib/Lex/ModuleMap.cpp b/clang/lib/Lex/ModuleMap.cpp index 4fbed2cc064..6aefb035266 100644 --- a/clang/lib/Lex/ModuleMap.cpp +++ b/clang/lib/Lex/ModuleMap.cpp @@ -208,9 +208,11 @@ ModuleMap::findHeaderInUmbrellaDirs(const FileEntry *File, // Returns true if RequestingModule directly uses RequestedModule. static bool directlyUses(const Module *RequestingModule, const Module *RequestedModule) { - return std::find(RequestingModule->DirectUses.begin(), - RequestingModule->DirectUses.end(), - RequestedModule) != RequestingModule->DirectUses.end(); + for (const Module* DirectUse : RequestingModule->DirectUses) { + if (RequestedModule->isSubModuleOf(DirectUse)) + return true; + } + return false; } static bool violatesPrivateInclude(Module *RequestingModule, diff --git a/clang/test/Modules/Inputs/declare-use/module.map b/clang/test/Modules/Inputs/declare-use/module.map index ae8615278ac..a74a7ae04a4 100644 --- a/clang/test/Modules/Inputs/declare-use/module.map +++ b/clang/test/Modules/Inputs/declare-use/module.map @@ -39,6 +39,7 @@ module XG { use XE use XJ use XK + use XN } module XH { @@ -66,5 +67,11 @@ module XM { textual header "m2.h" } +module XN { + module sub { + header "sub.h" + } +} + module XS { } diff --git a/clang/test/Modules/Inputs/declare-use/sub.h b/clang/test/Modules/Inputs/declare-use/sub.h new file mode 100644 index 00000000000..63d4234ce70 --- /dev/null +++ b/clang/test/Modules/Inputs/declare-use/sub.h @@ -0,0 +1,4 @@ +#ifndef SUB_H +#define SUB_H +const int sub = 42; +#endif diff --git a/clang/test/Modules/declare-use1.cpp b/clang/test/Modules/declare-use1.cpp index 5fc43360ffa..adba59556f8 100644 --- a/clang/test/Modules/declare-use1.cpp +++ b/clang/test/Modules/declare-use1.cpp @@ -5,4 +5,5 @@ #include "e.h" #include "f.h" // expected-error {{module XG does not depend on a module exporting 'f.h'}} #include "i.h" -const int g2 = g1 + e + f + aux_i; +#include "sub.h" +const int g2 = g1 + e + f + aux_i + sub; |