[PATCH] D14353: Allow use of private headers in different sub-modules.

Manuel Klimek via cfe-commits cfe-commits at lists.llvm.org
Wed Nov 4 15:34:30 PST 2015


klimek created this revision.
klimek added a reviewer: rsmith.
klimek added a subscriber: cfe-commits.

http://reviews.llvm.org/D14353

Files:
  lib/Lex/ModuleMap.cpp
  test/Modules/Inputs/private3/private.h
  test/Modules/Inputs/private3/public.h
  test/Modules/private.modulemap

Index: test/Modules/private.modulemap
===================================================================
--- /dev/null
+++ test/Modules/private.modulemap
@@ -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"
+  }
+}
Index: test/Modules/Inputs/private3/public.h
===================================================================
--- /dev/null
+++ test/Modules/Inputs/private3/public.h
@@ -0,0 +1,11 @@
+#ifndef PUBLIC_H
+#define PUBLIC_H
+
+#include "private.h"
+
+void pub() {
+  priv();
+}
+
+#endif
+
Index: test/Modules/Inputs/private3/private.h
===================================================================
--- /dev/null
+++ test/Modules/Inputs/private3/private.h
@@ -0,0 +1,7 @@
+#ifndef PRIVATE_H
+#define PRIVATE_H
+
+void priv();
+
+#endif
+
Index: lib/Lex/ModuleMap.cpp
===================================================================
--- lib/Lex/ModuleMap.cpp
+++ lib/Lex/ModuleMap.cpp
@@ -232,10 +232,8 @@
   }
 #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;
+         RequestedModule->getTopLevelModule() !=
+             RequestingModule->getTopLevelModule();
 }
 
 static Module *getTopLevelOrNull(Module *M) {


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D14353.39276.patch
Type: text/x-patch
Size: 2502 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20151104/375f22c9/attachment.bin>


More information about the cfe-commits mailing list