r298391 - [Modules] Find PrivateHeaders when looking into subframeworks

Bruno Cardoso Lopes via cfe-commits cfe-commits at lists.llvm.org
Tue Mar 21 09:43:51 PDT 2017


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"




More information about the cfe-commits mailing list