]> granicus.if.org Git - clang/commitdiff
Make a module "use" also count as use of all its submodules
authorDaniel Jasper <djasper@google.com>
Fri, 13 Mar 2015 11:26:16 +0000 (11:26 +0000)
committerDaniel Jasper <djasper@google.com>
Fri, 13 Mar 2015 11:26:16 +0000 (11:26 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@232159 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Lex/ModuleMap.cpp
test/Modules/Inputs/declare-use/module.map
test/Modules/Inputs/declare-use/sub.h [new file with mode: 0644]
test/Modules/declare-use1.cpp

index 4fbed2cc0649f9e20dfdf6614d91ca1a2e299969..6aefb03526658b7b46697eee858b117bde8436a6 100644 (file)
@@ -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,
index ae8615278aca3ed2838699b885d3222740a72484..a74a7ae04a4c8202757e79a4e17f2b0ba4491776 100644 (file)
@@ -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/test/Modules/Inputs/declare-use/sub.h b/test/Modules/Inputs/declare-use/sub.h
new file mode 100644 (file)
index 0000000..63d4234
--- /dev/null
@@ -0,0 +1,4 @@
+#ifndef SUB_H
+#define SUB_H
+const int sub = 42;
+#endif
index 5fc43360ffa3d95d07896627b971baf76a475468..adba59556f8d4ddccbdf9236a647db18030b063f 100644 (file)
@@ -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;