summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Jasper <djasper@google.com>2015-03-13 11:26:16 +0000
committerDaniel Jasper <djasper@google.com>2015-03-13 11:26:16 +0000
commitb6ba46ef304b2294e477dc4a3f571f38fbd47113 (patch)
tree73b0c39c3d5ba54e572de94dfce9b9a07219facd
parent0deef9c3cbf4101b2a47d8663caf44294e587074 (diff)
downloadbcm5719-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.cpp8
-rw-r--r--clang/test/Modules/Inputs/declare-use/module.map7
-rw-r--r--clang/test/Modules/Inputs/declare-use/sub.h4
-rw-r--r--clang/test/Modules/declare-use1.cpp3
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;
OpenPOWER on IntegriCloud