Make a module "use" also count as use of all its submodules

llvm-svn: 232159
This commit is contained in:
Daniel Jasper 2015-03-13 11:26:16 +00:00
parent 0deef9c3cb
commit b6ba46ef30
4 changed files with 18 additions and 4 deletions

View 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,

View 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 {
}

View File

@ -0,0 +1,4 @@
#ifndef SUB_H
#define SUB_H
const int sub = 42;
#endif

View 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;