diff options
12 files changed, 50 insertions, 3 deletions
diff --git a/clang/lib/Lex/ModuleMap.cpp b/clang/lib/Lex/ModuleMap.cpp index 568894c32b9..6f44dc757e8 100644 --- a/clang/lib/Lex/ModuleMap.cpp +++ b/clang/lib/Lex/ModuleMap.cpp @@ -1913,8 +1913,10 @@ void ModuleMapParser::parseHeaderDecl(MMToken::TokenKind LeadingToken, // '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); diff --git a/clang/test/Modules/Inputs/MainA.framework/Frameworks/Sub.framework/Headers/B.h b/clang/test/Modules/Inputs/MainA.framework/Frameworks/Sub.framework/Headers/B.h new file mode 100644 index 00000000000..761540b09cb --- /dev/null +++ b/clang/test/Modules/Inputs/MainA.framework/Frameworks/Sub.framework/Headers/B.h @@ -0,0 +1 @@ +// B.h diff --git a/clang/test/Modules/Inputs/MainA.framework/Frameworks/Sub.framework/Headers/Sub.h b/clang/test/Modules/Inputs/MainA.framework/Frameworks/Sub.framework/Headers/Sub.h new file mode 100644 index 00000000000..fd86e3cf872 --- /dev/null +++ b/clang/test/Modules/Inputs/MainA.framework/Frameworks/Sub.framework/Headers/Sub.h @@ -0,0 +1,2 @@ +// Sub.h +#import "B.h" diff --git a/clang/test/Modules/Inputs/MainA.framework/Frameworks/Sub.framework/PrivateHeaders/BPriv.h b/clang/test/Modules/Inputs/MainA.framework/Frameworks/Sub.framework/PrivateHeaders/BPriv.h new file mode 100644 index 00000000000..4ab49b798c6 --- /dev/null +++ b/clang/test/Modules/Inputs/MainA.framework/Frameworks/Sub.framework/PrivateHeaders/BPriv.h @@ -0,0 +1 @@ +// BPriv.h diff --git a/clang/test/Modules/Inputs/MainA.framework/Frameworks/Sub.framework/PrivateHeaders/SubPriv.h b/clang/test/Modules/Inputs/MainA.framework/Frameworks/Sub.framework/PrivateHeaders/SubPriv.h new file mode 100644 index 00000000000..f6ac6188d65 --- /dev/null +++ b/clang/test/Modules/Inputs/MainA.framework/Frameworks/Sub.framework/PrivateHeaders/SubPriv.h @@ -0,0 +1 @@ +#import "BPriv.h" diff --git a/clang/test/Modules/Inputs/MainA.framework/Headers/A.h b/clang/test/Modules/Inputs/MainA.framework/Headers/A.h new file mode 100644 index 00000000000..975f1f0437b --- /dev/null +++ b/clang/test/Modules/Inputs/MainA.framework/Headers/A.h @@ -0,0 +1 @@ +// A.h diff --git a/clang/test/Modules/Inputs/MainA.framework/Headers/Main.h b/clang/test/Modules/Inputs/MainA.framework/Headers/Main.h new file mode 100644 index 00000000000..cb8cc00a0c4 --- /dev/null +++ b/clang/test/Modules/Inputs/MainA.framework/Headers/Main.h @@ -0,0 +1,2 @@ +// Main.h +#import "A.h" diff --git a/clang/test/Modules/Inputs/MainA.framework/Modules/module.modulemap b/clang/test/Modules/Inputs/MainA.framework/Modules/module.modulemap new file mode 100644 index 00000000000..4b0b5e95538 --- /dev/null +++ b/clang/test/Modules/Inputs/MainA.framework/Modules/module.modulemap @@ -0,0 +1,12 @@ +framework module MainA { + umbrella header "Main.h" + + module * { export * } + export * + + framework module Sub { + umbrella header "Sub.h" + module * { export * } + export * + } +} diff --git a/clang/test/Modules/Inputs/MainA.framework/Modules/module.private.modulemap b/clang/test/Modules/Inputs/MainA.framework/Modules/module.private.modulemap new file mode 100644 index 00000000000..a8dc5c2be5f --- /dev/null +++ b/clang/test/Modules/Inputs/MainA.framework/Modules/module.private.modulemap @@ -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 * + } +} diff --git a/clang/test/Modules/Inputs/MainA.framework/PrivateHeaders/APriv.h b/clang/test/Modules/Inputs/MainA.framework/PrivateHeaders/APriv.h new file mode 100644 index 00000000000..6ac683c39c5 --- /dev/null +++ b/clang/test/Modules/Inputs/MainA.framework/PrivateHeaders/APriv.h @@ -0,0 +1 @@ +// APriv.h diff --git a/clang/test/Modules/Inputs/MainA.framework/PrivateHeaders/MainPriv.h b/clang/test/Modules/Inputs/MainA.framework/PrivateHeaders/MainPriv.h new file mode 100644 index 00000000000..68103017ad0 --- /dev/null +++ b/clang/test/Modules/Inputs/MainA.framework/PrivateHeaders/MainPriv.h @@ -0,0 +1 @@ +#import "APriv.h" diff --git a/clang/test/Modules/find-privateheaders.m b/clang/test/Modules/find-privateheaders.m index c5e82ac70da..5720a73f9be 100644 --- a/clang/test/Modules/find-privateheaders.m +++ b/clang/test/Modules/find-privateheaders.m @@ -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 |