<div dir="ltr">Hello Bruno,<br><br>This commit introduced a failing test<br><br>Clang :: Modules/module-imported-by-pch-path.m<br><br>on llvm-clang-x86_64-expensive-checks-win bot.<br>Please see <a href="http://lab.llvm.org:8011/builders/llvm-clang-x86_64-expensive-checks-win/builds/6234/steps/test-check-all/logs/stdio">http://lab.llvm.org:8011/builders/llvm-clang-x86_64-expensive-checks-win/builds/6234/steps/test-check-all/logs/stdio</a> for more details.<br><br>Could you take care of this, please?<br><br>Thanks<br><br>Galina<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Nov 16, 2017 at 7:24 PM, Bruno Cardoso Lopes via cfe-commits <span dir="ltr"><<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: bruno<br>
Date: Thu Nov 16 19:24:11 2017<br>
New Revision: 318503<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=318503&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project?rev=318503&view=rev</a><br>
Log:<br>
[PCH+Modules] Improve diagnosticts to help out users pass an extra header search path<br>
<br>
When mixing PCH and Implicit Modules, missing a header search path<br>
can lead to the implicit built PCM to complaint about not finding its<br>
matching module map.<br>
<br>
Instead of adding more magic to implicit modules engine, add a note to<br>
help the user add the appropriate path.<br>
<br>
rdar://problem/33388847<br>
<br>
Added:<br>
    cfe/trunk/test/Modules/module-<wbr>imported-by-pch-path.m<br>
Modified:<br>
    cfe/trunk/include/clang/Basic/<wbr>DiagnosticSerializationKinds.<wbr>td<br>
    cfe/trunk/lib/Serialization/<wbr>ASTReader.cpp<br>
<br>
Modified: cfe/trunk/include/clang/Basic/<wbr>DiagnosticSerializationKinds.<wbr>td<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSerializationKinds.td?rev=318503&r1=318502&r2=318503&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/cfe/trunk/include/<wbr>clang/Basic/<wbr>DiagnosticSerializationKinds.<wbr>td?rev=318503&r1=318502&r2=<wbr>318503&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/include/clang/Basic/<wbr>DiagnosticSerializationKinds.<wbr>td (original)<br>
+++ cfe/trunk/include/clang/Basic/<wbr>DiagnosticSerializationKinds.<wbr>td Thu Nov 16 19:24:11 2017<br>
@@ -77,6 +77,8 @@ def err_imported_module_not_found : Erro<br>
     "module '%0' in AST file '%1' (imported by AST file '%2') "<br>
     "is not defined in any loaded module map file; "<br>
     "maybe you need to load '%3'?">, DefaultFatal;<br>
+def note_imported_by_pch_module_<wbr>not_found : Note<<br>
+    "consider adding '%0' to the header search path">;<br>
 def err_imported_module_modmap_<wbr>changed : Error<<br>
     "module '%0' imported by AST file '%1' found in a different module map file"<br>
     " (%2) than when the importing AST file was built (%3)">, DefaultFatal;<br>
<br>
Modified: cfe/trunk/lib/Serialization/<wbr>ASTReader.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTReader.cpp?rev=318503&r1=318502&r2=318503&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/cfe/trunk/lib/<wbr>Serialization/ASTReader.cpp?<wbr>rev=318503&r1=318502&r2=<wbr>318503&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/lib/Serialization/<wbr>ASTReader.cpp (original)<br>
+++ cfe/trunk/lib/Serialization/<wbr>ASTReader.cpp Thu Nov 16 19:24:11 2017<br>
@@ -3569,15 +3569,22 @@ ASTReader::<wbr>ReadModuleMapFileBlock(Record<br>
     if (!ModMap) {<br>
       assert(ImportedBy && "top-level import should be verified");<br>
       if ((ClientLoadCapabilities & ARR_OutOfDate) == 0) {<br>
-        if (auto *ASTFE = M ? M->getASTFile() : nullptr)<br>
+        if (auto *ASTFE = M ? M->getASTFile() : nullptr) {<br>
           // This module was defined by an imported (explicit) module.<br>
           Diag(diag::err_module_file_<wbr>conflict) << F.ModuleName << F.FileName<br>
                                                << ASTFE->getName();<br>
-        else<br>
+        } else {<br>
           // This module was built with a different module map.<br>
           Diag(diag::err_imported_<wbr>module_not_found)<br>
               << F.ModuleName << F.FileName << ImportedBy->FileName<br>
               << F.ModuleMapPath;<br>
+          // In case it was imported by a PCH, there's a chance the user is<br>
+          // just missing to include the search path to the directory containing<br>
+          // the modulemap.<br>
+          if (ImportedBy->Kind == MK_PCH)<br>
+            Diag(diag::note_imported_by_<wbr>pch_module_not_found)<br>
+                << llvm::sys::path::parent_path(<wbr>F.ModuleMapPath);<br>
+        }<br>
       }<br>
       return OutOfDate;<br>
     }<br>
<br>
Added: cfe/trunk/test/Modules/module-<wbr>imported-by-pch-path.m<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/module-imported-by-pch-path.m?rev=318503&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/cfe/trunk/test/<wbr>Modules/module-imported-by-<wbr>pch-path.m?rev=318503&view=<wbr>auto</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/test/Modules/module-<wbr>imported-by-pch-path.m (added)<br>
+++ cfe/trunk/test/Modules/module-<wbr>imported-by-pch-path.m Thu Nov 16 19:24:11 2017<br>
@@ -0,0 +1,17 @@<br>
+// RUN: rm -rf %t.dst %t.cache<br>
+// RUN: mkdir -p %t.dst/folder-with-modulemap %t.dst/pch-folder<br>
+// RUN: echo '#import "folder-with-modulemap/<wbr>included.h"' > %t.dst/header.h<br>
+// RUN: echo 'extern int MyModuleVersion;' > %t.dst/folder-with-modulemap/<wbr>MyModule.h<br>
+// RUN: echo '@import MyModule;' > %t.dst/folder-with-modulemap/<wbr>included.h<br>
+// RUN: echo 'module MyModule { header "MyModule.h" }' > %t.dst/folder-with-modulemap/<wbr>module.modulemap<br>
+<br>
+// RUN: %clang -o %t.dst/pch-folder/header.pch -x objective-c-header -fmodules-cache-path=%t.cache -fmodules %t.dst/header.h<br>
+// RUN: not %clang -fsyntax-only -fmodules-cache-path=%t.cache -fmodules %s -include-pch %t.dst/pch-folder/header.pch 2>&1 | FileCheck %s<br>
+<br>
+void test() {<br>
+  (void)MyModuleVersion; // should be found by implicit import<br>
+}<br>
+<br>
+// CHECK: module 'MyModule' in AST file '{{.*MyModule.*pcm}}' (imported by AST file '[[PCH:.*header.pch]]') is not defined in any loaded module map file; maybe you need to load '[[PATH:.*folder-with-<wbr>modulemap]]/module.modulemap'<br>
+// CHECK: consider adding '[[PATH]]' to the header search path<br>
+// CHECK: imported by '[[PCH]]'<br>
<br>
<br>
______________________________<wbr>_________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/cfe-commits</a><br>
</blockquote></div><br></div>