forked from OSchip/llvm-project
Allow use of private headers in different sub-modules.
llvm-svn: 252170
This commit is contained in:
parent
ac1c0f8931
commit
e8bd0db698
|
@ -231,11 +231,9 @@ static bool violatesPrivateInclude(Module *RequestingModule,
|
|||
assert((!IsPrivateRole || IsPrivate) && "inconsistent headers and roles");
|
||||
}
|
||||
#endif
|
||||
return IsPrivateRole &&
|
||||
// FIXME: Should we map RequestingModule to its top-level module here
|
||||
// too? This check is redundant with the isSubModuleOf check in
|
||||
// diagnoseHeaderInclusion.
|
||||
RequestedModule->getTopLevelModule() != RequestingModule;
|
||||
return IsPrivateRole && (!RequestingModule ||
|
||||
RequestedModule->getTopLevelModule() !=
|
||||
RequestingModule->getTopLevelModule());
|
||||
}
|
||||
|
||||
static Module *getTopLevelOrNull(Module *M) {
|
||||
|
@ -261,11 +259,6 @@ void ModuleMap::diagnoseHeaderInclusion(Module *RequestingModule,
|
|||
HeadersMap::iterator Known = findKnownHeader(File);
|
||||
if (Known != Headers.end()) {
|
||||
for (const KnownHeader &Header : Known->second) {
|
||||
// If 'File' is part of 'RequestingModule' we can definitely include it.
|
||||
if (Header.getModule() &&
|
||||
Header.getModule()->isSubModuleOf(RequestingModule))
|
||||
return;
|
||||
|
||||
// Remember private headers for later printing of a diagnostic.
|
||||
if (violatesPrivateInclude(RequestingModule, File, Header.getRole(),
|
||||
Header.getModule())) {
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
#ifndef PRIVATE_H
|
||||
#define PRIVATE_H
|
||||
|
||||
void priv();
|
||||
|
||||
#endif
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
#ifndef PUBLIC_H
|
||||
#define PUBLIC_H
|
||||
|
||||
#include "private.h"
|
||||
|
||||
void pub() {
|
||||
priv();
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
// RUN: rm -rf %t
|
||||
// RUN: cd %S
|
||||
// RUN: %clang_cc1 -fmodules -x c++ -std=c++11 -fmodules-cache-path=%t \
|
||||
// RUN: -I%S/Inputs/private3 -emit-module -fmodule-name=A -o %t/m.pcm %s
|
||||
// RUN: %clang_cc1 -fmodules -x c++ -std=c++11 -fmodules-cache-path=%t \
|
||||
// RUN: -I%S/Inputs/private3 -emit-module -fmodule-name=B -o %t/m.pcm %s
|
||||
// RUN: %clang_cc1 -fmodules -x c++ -std=c++11 -fmodules-cache-path=%t \
|
||||
// RUN: -I%S/Inputs/private3 -emit-module -fmodule-name=C -o %t/m.pcm %s
|
||||
// RUN: %clang_cc1 -fmodules -x c++ -std=c++11 -fmodules-cache-path=%t \
|
||||
// RUN: -I%S/Inputs/private3 -emit-module -fmodule-name=D -o %t/m.pcm %s
|
||||
|
||||
module A {
|
||||
header "Inputs/private3/public.h"
|
||||
private header "Inputs/private3/private.h"
|
||||
}
|
||||
module B {
|
||||
header "Inputs/private3/public.h"
|
||||
module "private.h" {
|
||||
private header "Inputs/private3/private.h"
|
||||
}
|
||||
}
|
||||
module C {
|
||||
module "public.h" {
|
||||
header "Inputs/private3/public.h"
|
||||
}
|
||||
private header "Inputs/private3/private.h"
|
||||
}
|
||||
module D {
|
||||
module "public.h" {
|
||||
header "Inputs/private3/public.h"
|
||||
}
|
||||
module "private.h" {
|
||||
private header "Inputs/private3/private.h"
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue