From: Daniel Jasper Date: Fri, 13 Mar 2015 11:26:16 +0000 (+0000) Subject: Make a module "use" also count as use of all its submodules X-Git-Tag: llvmorg-3.7.0-rc1~9332 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=b6ba46ef304b2294e477dc4a3f571f38fbd47113;p=platform%2Fupstream%2Fllvm.git Make a module "use" also count as use of all its submodules llvm-svn: 232159 --- diff --git a/clang/lib/Lex/ModuleMap.cpp b/clang/lib/Lex/ModuleMap.cpp index 4fbed2c..6aefb03 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 ae86152..a74a7ae 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 0000000..63d4234 --- /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 5fc4336..adba595 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;