summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--clang/lib/Lex/ModuleMap.cpp6
-rw-r--r--clang/test/Modules/Inputs/MainA.framework/Frameworks/Sub.framework/Headers/B.h1
-rw-r--r--clang/test/Modules/Inputs/MainA.framework/Frameworks/Sub.framework/Headers/Sub.h2
-rw-r--r--clang/test/Modules/Inputs/MainA.framework/Frameworks/Sub.framework/PrivateHeaders/BPriv.h1
-rw-r--r--clang/test/Modules/Inputs/MainA.framework/Frameworks/Sub.framework/PrivateHeaders/SubPriv.h1
-rw-r--r--clang/test/Modules/Inputs/MainA.framework/Headers/A.h1
-rw-r--r--clang/test/Modules/Inputs/MainA.framework/Headers/Main.h2
-rw-r--r--clang/test/Modules/Inputs/MainA.framework/Modules/module.modulemap12
-rw-r--r--clang/test/Modules/Inputs/MainA.framework/Modules/module.private.modulemap12
-rw-r--r--clang/test/Modules/Inputs/MainA.framework/PrivateHeaders/APriv.h1
-rw-r--r--clang/test/Modules/Inputs/MainA.framework/PrivateHeaders/MainPriv.h1
-rw-r--r--clang/test/Modules/find-privateheaders.m13
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
OpenPOWER on IntegriCloud