Author: klimek Date: Thu Nov 5 09:24:47 2015 New Revision: 252170 URL: http://llvm.org/viewvc/llvm-project?rev=252170&view=rev Log: Allow use of private headers in different sub-modules.
Added: cfe/trunk/test/Modules/Inputs/private3/ cfe/trunk/test/Modules/Inputs/private3/private.h cfe/trunk/test/Modules/Inputs/private3/public.h cfe/trunk/test/Modules/private.modulemap Modified: cfe/trunk/lib/Lex/ModuleMap.cpp Modified: cfe/trunk/lib/Lex/ModuleMap.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/ModuleMap.cpp?rev=252170&r1=252169&r2=252170&view=diff ============================================================================== --- cfe/trunk/lib/Lex/ModuleMap.cpp (original) +++ cfe/trunk/lib/Lex/ModuleMap.cpp Thu Nov 5 09:24:47 2015 @@ -231,11 +231,9 @@ static bool violatesPrivateInclude(Modul 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( 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())) { Added: cfe/trunk/test/Modules/Inputs/private3/private.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/private3/private.h?rev=252170&view=auto ============================================================================== --- cfe/trunk/test/Modules/Inputs/private3/private.h (added) +++ cfe/trunk/test/Modules/Inputs/private3/private.h Thu Nov 5 09:24:47 2015 @@ -0,0 +1,7 @@ +#ifndef PRIVATE_H +#define PRIVATE_H + +void priv(); + +#endif + Added: cfe/trunk/test/Modules/Inputs/private3/public.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/private3/public.h?rev=252170&view=auto ============================================================================== --- cfe/trunk/test/Modules/Inputs/private3/public.h (added) +++ cfe/trunk/test/Modules/Inputs/private3/public.h Thu Nov 5 09:24:47 2015 @@ -0,0 +1,11 @@ +#ifndef PUBLIC_H +#define PUBLIC_H + +#include "private.h" + +void pub() { + priv(); +} + +#endif + Added: cfe/trunk/test/Modules/private.modulemap URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/private.modulemap?rev=252170&view=auto ============================================================================== --- cfe/trunk/test/Modules/private.modulemap (added) +++ cfe/trunk/test/Modules/private.modulemap Thu Nov 5 09:24:47 2015 @@ -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" + } +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits