Author: bruno Date: Mon May 8 19:41:38 2017 New Revision: 302491 URL: http://llvm.org/viewvc/llvm-project?rev=302491&view=rev Log: [Modules] Allow umbrella frameworks to define private submodules for subframeworks
In r298391 we fixed the umbrella framework model to work when submodules named "Private" are used. This complements the work by allowing the umbrella framework model to work in general. rdar://problem/31790067 Added: cfe/trunk/test/Modules/Inputs/MainA.framework/ cfe/trunk/test/Modules/Inputs/MainA.framework/Frameworks/ cfe/trunk/test/Modules/Inputs/MainA.framework/Frameworks/Sub.framework/ cfe/trunk/test/Modules/Inputs/MainA.framework/Frameworks/Sub.framework/Headers/ cfe/trunk/test/Modules/Inputs/MainA.framework/Frameworks/Sub.framework/Headers/B.h cfe/trunk/test/Modules/Inputs/MainA.framework/Frameworks/Sub.framework/Headers/Sub.h cfe/trunk/test/Modules/Inputs/MainA.framework/Frameworks/Sub.framework/PrivateHeaders/ cfe/trunk/test/Modules/Inputs/MainA.framework/Frameworks/Sub.framework/PrivateHeaders/BPriv.h cfe/trunk/test/Modules/Inputs/MainA.framework/Frameworks/Sub.framework/PrivateHeaders/SubPriv.h cfe/trunk/test/Modules/Inputs/MainA.framework/Headers/ cfe/trunk/test/Modules/Inputs/MainA.framework/Headers/A.h cfe/trunk/test/Modules/Inputs/MainA.framework/Headers/Main.h cfe/trunk/test/Modules/Inputs/MainA.framework/Modules/ cfe/trunk/test/Modules/Inputs/MainA.framework/Modules/module.modulemap cfe/trunk/test/Modules/Inputs/MainA.framework/Modules/module.private.modulemap cfe/trunk/test/Modules/Inputs/MainA.framework/PrivateHeaders/ cfe/trunk/test/Modules/Inputs/MainA.framework/PrivateHeaders/APriv.h cfe/trunk/test/Modules/Inputs/MainA.framework/PrivateHeaders/MainPriv.h Modified: cfe/trunk/lib/Lex/ModuleMap.cpp cfe/trunk/test/Modules/find-privateheaders.m Modified: cfe/trunk/lib/Lex/ModuleMap.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/ModuleMap.cpp?rev=302491&r1=302490&r2=302491&view=diff ============================================================================== --- cfe/trunk/lib/Lex/ModuleMap.cpp (original) +++ cfe/trunk/lib/Lex/ModuleMap.cpp Mon May 8 19:41:38 2017 @@ -1913,8 +1913,10 @@ void ModuleMapParser::parseHeaderDecl(MM // '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); + if (ActiveModule->IsFramework && ActiveModule->Name == "Private") + RelativePathName.clear(); + else + RelativePathName.resize(RelativePathLength); FullPathName.resize(FullPathLength); llvm::sys::path::append(RelativePathName, "PrivateHeaders", Header.FileName); Added: cfe/trunk/test/Modules/Inputs/MainA.framework/Frameworks/Sub.framework/Headers/B.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/MainA.framework/Frameworks/Sub.framework/Headers/B.h?rev=302491&view=auto ============================================================================== --- cfe/trunk/test/Modules/Inputs/MainA.framework/Frameworks/Sub.framework/Headers/B.h (added) +++ cfe/trunk/test/Modules/Inputs/MainA.framework/Frameworks/Sub.framework/Headers/B.h Mon May 8 19:41:38 2017 @@ -0,0 +1 @@ +// B.h Added: cfe/trunk/test/Modules/Inputs/MainA.framework/Frameworks/Sub.framework/Headers/Sub.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/MainA.framework/Frameworks/Sub.framework/Headers/Sub.h?rev=302491&view=auto ============================================================================== --- cfe/trunk/test/Modules/Inputs/MainA.framework/Frameworks/Sub.framework/Headers/Sub.h (added) +++ cfe/trunk/test/Modules/Inputs/MainA.framework/Frameworks/Sub.framework/Headers/Sub.h Mon May 8 19:41:38 2017 @@ -0,0 +1,2 @@ +// Sub.h +#import "B.h" Added: cfe/trunk/test/Modules/Inputs/MainA.framework/Frameworks/Sub.framework/PrivateHeaders/BPriv.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/MainA.framework/Frameworks/Sub.framework/PrivateHeaders/BPriv.h?rev=302491&view=auto ============================================================================== --- cfe/trunk/test/Modules/Inputs/MainA.framework/Frameworks/Sub.framework/PrivateHeaders/BPriv.h (added) +++ cfe/trunk/test/Modules/Inputs/MainA.framework/Frameworks/Sub.framework/PrivateHeaders/BPriv.h Mon May 8 19:41:38 2017 @@ -0,0 +1 @@ +// BPriv.h Added: cfe/trunk/test/Modules/Inputs/MainA.framework/Frameworks/Sub.framework/PrivateHeaders/SubPriv.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/MainA.framework/Frameworks/Sub.framework/PrivateHeaders/SubPriv.h?rev=302491&view=auto ============================================================================== --- cfe/trunk/test/Modules/Inputs/MainA.framework/Frameworks/Sub.framework/PrivateHeaders/SubPriv.h (added) +++ cfe/trunk/test/Modules/Inputs/MainA.framework/Frameworks/Sub.framework/PrivateHeaders/SubPriv.h Mon May 8 19:41:38 2017 @@ -0,0 +1 @@ +#import "BPriv.h" Added: cfe/trunk/test/Modules/Inputs/MainA.framework/Headers/A.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/MainA.framework/Headers/A.h?rev=302491&view=auto ============================================================================== --- cfe/trunk/test/Modules/Inputs/MainA.framework/Headers/A.h (added) +++ cfe/trunk/test/Modules/Inputs/MainA.framework/Headers/A.h Mon May 8 19:41:38 2017 @@ -0,0 +1 @@ +// A.h Added: cfe/trunk/test/Modules/Inputs/MainA.framework/Headers/Main.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/MainA.framework/Headers/Main.h?rev=302491&view=auto ============================================================================== --- cfe/trunk/test/Modules/Inputs/MainA.framework/Headers/Main.h (added) +++ cfe/trunk/test/Modules/Inputs/MainA.framework/Headers/Main.h Mon May 8 19:41:38 2017 @@ -0,0 +1,2 @@ +// Main.h +#import "A.h" Added: cfe/trunk/test/Modules/Inputs/MainA.framework/Modules/module.modulemap URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/MainA.framework/Modules/module.modulemap?rev=302491&view=auto ============================================================================== --- cfe/trunk/test/Modules/Inputs/MainA.framework/Modules/module.modulemap (added) +++ cfe/trunk/test/Modules/Inputs/MainA.framework/Modules/module.modulemap Mon May 8 19:41:38 2017 @@ -0,0 +1,12 @@ +framework module MainA { + umbrella header "Main.h" + + module * { export * } + export * + + framework module Sub { + umbrella header "Sub.h" + module * { export * } + export * + } +} Added: cfe/trunk/test/Modules/Inputs/MainA.framework/Modules/module.private.modulemap URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/MainA.framework/Modules/module.private.modulemap?rev=302491&view=auto ============================================================================== --- cfe/trunk/test/Modules/Inputs/MainA.framework/Modules/module.private.modulemap (added) +++ cfe/trunk/test/Modules/Inputs/MainA.framework/Modules/module.private.modulemap Mon May 8 19:41:38 2017 @@ -0,0 +1,12 @@ +framework module MainA_Private { + umbrella header "MainPriv.h" + + module * { export * } + export * + + explicit framework module Sub { + umbrella header "SubPriv.h" + module * { export * } + export * + } +} Added: cfe/trunk/test/Modules/Inputs/MainA.framework/PrivateHeaders/APriv.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/MainA.framework/PrivateHeaders/APriv.h?rev=302491&view=auto ============================================================================== --- cfe/trunk/test/Modules/Inputs/MainA.framework/PrivateHeaders/APriv.h (added) +++ cfe/trunk/test/Modules/Inputs/MainA.framework/PrivateHeaders/APriv.h Mon May 8 19:41:38 2017 @@ -0,0 +1 @@ +// APriv.h Added: cfe/trunk/test/Modules/Inputs/MainA.framework/PrivateHeaders/MainPriv.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/MainA.framework/PrivateHeaders/MainPriv.h?rev=302491&view=auto ============================================================================== --- cfe/trunk/test/Modules/Inputs/MainA.framework/PrivateHeaders/MainPriv.h (added) +++ cfe/trunk/test/Modules/Inputs/MainA.framework/PrivateHeaders/MainPriv.h Mon May 8 19:41:38 2017 @@ -0,0 +1 @@ +#import "APriv.h" Modified: cfe/trunk/test/Modules/find-privateheaders.m URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/find-privateheaders.m?rev=302491&r1=302490&r2=302491&view=diff ============================================================================== --- cfe/trunk/test/Modules/find-privateheaders.m (original) +++ cfe/trunk/test/Modules/find-privateheaders.m Mon May 8 19:41:38 2017 @@ -1,2 +1,13 @@ -// RUN: %clang_cc1 -fmodules -fsyntax-only -F%S/Inputs %s +// RUN: rm -rf %t.cache +// RUN: %clang_cc1 -fmodules -fsyntax-only -F%S/Inputs -fimplicit-module-maps \ +// RUN: -fmodules-cache-path=%t.cache -Wno-private-module -DBUILD_PUBLIC -verify %s +// RUN: rm -rf %t.cache +// RUN: %clang_cc1 -fmodules -fsyntax-only -F%S/Inputs -fimplicit-module-maps \ +// RUN: -fmodules-cache-path=%t.cache -Wno-private-module -verify %s +//expected-no-diagnostics + +#ifdef BUILD_PUBLIC #import "Main/Main.h" +#else +#import "MainA/MainPriv.h" +#endif _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits