Author: bruno Date: Tue Mar 21 11:43:51 2017 New Revision: 298391 URL: http://llvm.org/viewvc/llvm-project?rev=298391&view=rev Log: [Modules] Find PrivateHeaders when looking into subframeworks
Fix the current parsing of subframeworks in modulemaps to lookup for headers based on whether they are frameworks. rdar://problem/30563982 Added: cfe/trunk/test/Modules/Inputs/Main.framework/ cfe/trunk/test/Modules/Inputs/Main.framework/Frameworks/ cfe/trunk/test/Modules/Inputs/Main.framework/Frameworks/Sub.framework/ cfe/trunk/test/Modules/Inputs/Main.framework/Frameworks/Sub.framework/Headers/ cfe/trunk/test/Modules/Inputs/Main.framework/Frameworks/Sub.framework/Headers/B.h cfe/trunk/test/Modules/Inputs/Main.framework/Frameworks/Sub.framework/Headers/Sub.h cfe/trunk/test/Modules/Inputs/Main.framework/Frameworks/Sub.framework/PrivateHeaders/ cfe/trunk/test/Modules/Inputs/Main.framework/Frameworks/Sub.framework/PrivateHeaders/BPriv.h cfe/trunk/test/Modules/Inputs/Main.framework/Frameworks/Sub.framework/PrivateHeaders/SubPriv.h cfe/trunk/test/Modules/Inputs/Main.framework/Headers/ cfe/trunk/test/Modules/Inputs/Main.framework/Headers/A.h cfe/trunk/test/Modules/Inputs/Main.framework/Headers/Main.h cfe/trunk/test/Modules/Inputs/Main.framework/Modules/ cfe/trunk/test/Modules/Inputs/Main.framework/Modules/module.modulemap cfe/trunk/test/Modules/Inputs/Main.framework/Modules/module.private.modulemap cfe/trunk/test/Modules/Inputs/Main.framework/PrivateHeaders/ cfe/trunk/test/Modules/Inputs/Main.framework/PrivateHeaders/APriv.h cfe/trunk/test/Modules/Inputs/Main.framework/PrivateHeaders/MainPriv.h cfe/trunk/test/Modules/find-privateheaders.m 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=298391&r1=298390&r2=298391&view=diff ============================================================================== --- cfe/trunk/lib/Lex/ModuleMap.cpp (original) +++ cfe/trunk/lib/Lex/ModuleMap.cpp Tue Mar 21 11:43:51 2017 @@ -1841,7 +1841,7 @@ void ModuleMapParser::parseHeaderDecl(MM Module::UnresolvedHeaderDirective Header; Header.FileName = Tok.getString(); Header.FileNameLoc = consumeToken(); - + // Check whether we already have an umbrella. if (LeadingToken == MMToken::UmbrellaKeyword && ActiveModule->Umbrella) { Diags.Report(Header.FileNameLoc, diag::err_mmap_umbrella_clash) @@ -1861,19 +1861,25 @@ void ModuleMapParser::parseHeaderDecl(MM // Search for the header file within the search directory. SmallString<128> FullPathName(Directory->getName()); unsigned FullPathLength = FullPathName.size(); - + if (ActiveModule->isPartOfFramework()) { appendSubframeworkPaths(ActiveModule, RelativePathName); - + unsigned RelativePathLength = RelativePathName.size(); + // Check whether this file is in the public headers. llvm::sys::path::append(RelativePathName, "Headers", Header.FileName); llvm::sys::path::append(FullPathName, RelativePathName); File = SourceMgr.getFileManager().getFile(FullPathName); - + + // Check whether this file is in the private headers. if (!File) { - // Check whether this file is in the private headers. - // FIXME: Should we retain the subframework paths here? - RelativePathName.clear(); + // Ideally, private modules in the form 'FrameworkName.Private' should + // be defined as 'module FrameworkName.Private', and not as + // 'framework module FrameworkName.Private', since a 'Private.Framework' + // does not usually exist. However, since both are currently widely used + // for private modules, make sure we find the right path in both cases. + RelativePathName.resize(ActiveModule->IsFramework ? 0 + : RelativePathLength); FullPathName.resize(FullPathLength); llvm::sys::path::append(RelativePathName, "PrivateHeaders", Header.FileName); Added: cfe/trunk/test/Modules/Inputs/Main.framework/Frameworks/Sub.framework/Headers/B.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/Main.framework/Frameworks/Sub.framework/Headers/B.h?rev=298391&view=auto ============================================================================== --- cfe/trunk/test/Modules/Inputs/Main.framework/Frameworks/Sub.framework/Headers/B.h (added) +++ cfe/trunk/test/Modules/Inputs/Main.framework/Frameworks/Sub.framework/Headers/B.h Tue Mar 21 11:43:51 2017 @@ -0,0 +1 @@ +// B.h Added: cfe/trunk/test/Modules/Inputs/Main.framework/Frameworks/Sub.framework/Headers/Sub.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/Main.framework/Frameworks/Sub.framework/Headers/Sub.h?rev=298391&view=auto ============================================================================== --- cfe/trunk/test/Modules/Inputs/Main.framework/Frameworks/Sub.framework/Headers/Sub.h (added) +++ cfe/trunk/test/Modules/Inputs/Main.framework/Frameworks/Sub.framework/Headers/Sub.h Tue Mar 21 11:43:51 2017 @@ -0,0 +1,2 @@ +// Sub.h +#import "B.h" Added: cfe/trunk/test/Modules/Inputs/Main.framework/Frameworks/Sub.framework/PrivateHeaders/BPriv.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/Main.framework/Frameworks/Sub.framework/PrivateHeaders/BPriv.h?rev=298391&view=auto ============================================================================== --- cfe/trunk/test/Modules/Inputs/Main.framework/Frameworks/Sub.framework/PrivateHeaders/BPriv.h (added) +++ cfe/trunk/test/Modules/Inputs/Main.framework/Frameworks/Sub.framework/PrivateHeaders/BPriv.h Tue Mar 21 11:43:51 2017 @@ -0,0 +1 @@ +// BPriv.h Added: cfe/trunk/test/Modules/Inputs/Main.framework/Frameworks/Sub.framework/PrivateHeaders/SubPriv.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/Main.framework/Frameworks/Sub.framework/PrivateHeaders/SubPriv.h?rev=298391&view=auto ============================================================================== --- cfe/trunk/test/Modules/Inputs/Main.framework/Frameworks/Sub.framework/PrivateHeaders/SubPriv.h (added) +++ cfe/trunk/test/Modules/Inputs/Main.framework/Frameworks/Sub.framework/PrivateHeaders/SubPriv.h Tue Mar 21 11:43:51 2017 @@ -0,0 +1 @@ +#import "BPriv.h" Added: cfe/trunk/test/Modules/Inputs/Main.framework/Headers/A.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/Main.framework/Headers/A.h?rev=298391&view=auto ============================================================================== --- cfe/trunk/test/Modules/Inputs/Main.framework/Headers/A.h (added) +++ cfe/trunk/test/Modules/Inputs/Main.framework/Headers/A.h Tue Mar 21 11:43:51 2017 @@ -0,0 +1 @@ +// A.h Added: cfe/trunk/test/Modules/Inputs/Main.framework/Headers/Main.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/Main.framework/Headers/Main.h?rev=298391&view=auto ============================================================================== --- cfe/trunk/test/Modules/Inputs/Main.framework/Headers/Main.h (added) +++ cfe/trunk/test/Modules/Inputs/Main.framework/Headers/Main.h Tue Mar 21 11:43:51 2017 @@ -0,0 +1,2 @@ +// Main.h +#import "A.h" Added: cfe/trunk/test/Modules/Inputs/Main.framework/Modules/module.modulemap URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/Main.framework/Modules/module.modulemap?rev=298391&view=auto ============================================================================== --- cfe/trunk/test/Modules/Inputs/Main.framework/Modules/module.modulemap (added) +++ cfe/trunk/test/Modules/Inputs/Main.framework/Modules/module.modulemap Tue Mar 21 11:43:51 2017 @@ -0,0 +1,12 @@ +framework module Main { + umbrella header "Main.h" + + module * { export * } + export * + + framework module Sub { + umbrella header "Sub.h" + module * { export * } + export * + } +} Added: cfe/trunk/test/Modules/Inputs/Main.framework/Modules/module.private.modulemap URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/Main.framework/Modules/module.private.modulemap?rev=298391&view=auto ============================================================================== --- cfe/trunk/test/Modules/Inputs/Main.framework/Modules/module.private.modulemap (added) +++ cfe/trunk/test/Modules/Inputs/Main.framework/Modules/module.private.modulemap Tue Mar 21 11:43:51 2017 @@ -0,0 +1,11 @@ +module Main.Private { + umbrella header "MainPriv.h" + module * { export * } + export * +} + +module Main.Sub.Private { + umbrella header "SubPriv.h" + module * { export * } + export * +} Added: cfe/trunk/test/Modules/Inputs/Main.framework/PrivateHeaders/APriv.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/Main.framework/PrivateHeaders/APriv.h?rev=298391&view=auto ============================================================================== --- cfe/trunk/test/Modules/Inputs/Main.framework/PrivateHeaders/APriv.h (added) +++ cfe/trunk/test/Modules/Inputs/Main.framework/PrivateHeaders/APriv.h Tue Mar 21 11:43:51 2017 @@ -0,0 +1 @@ +// APriv.h Added: cfe/trunk/test/Modules/Inputs/Main.framework/PrivateHeaders/MainPriv.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/Main.framework/PrivateHeaders/MainPriv.h?rev=298391&view=auto ============================================================================== --- cfe/trunk/test/Modules/Inputs/Main.framework/PrivateHeaders/MainPriv.h (added) +++ cfe/trunk/test/Modules/Inputs/Main.framework/PrivateHeaders/MainPriv.h Tue Mar 21 11:43:51 2017 @@ -0,0 +1 @@ +#import "APriv.h" Added: cfe/trunk/test/Modules/find-privateheaders.m URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/find-privateheaders.m?rev=298391&view=auto ============================================================================== --- cfe/trunk/test/Modules/find-privateheaders.m (added) +++ cfe/trunk/test/Modules/find-privateheaders.m Tue Mar 21 11:43:51 2017 @@ -0,0 +1,2 @@ +// RUN: %clang_cc1 -fmodules -fsyntax-only -F%S/Inputs %s +#import "Main/Main.h" _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits