diff options
| author | Bruno Cardoso Lopes <bruno.cardoso@gmail.com> | 2017-11-17 03:24:11 +0000 |
|---|---|---|
| committer | Bruno Cardoso Lopes <bruno.cardoso@gmail.com> | 2017-11-17 03:24:11 +0000 |
| commit | a66a325bbc5144f71f6a5a22fbd7544cf01f32fc (patch) | |
| tree | bd8ab52e0cdb550f2247840fdf2798ae5e08adb5 /clang/lib | |
| parent | faaa42ad0a62594ffd28c60ca9fe91676670a15d (diff) | |
| download | bcm5719-llvm-a66a325bbc5144f71f6a5a22fbd7544cf01f32fc.tar.gz bcm5719-llvm-a66a325bbc5144f71f6a5a22fbd7544cf01f32fc.zip | |
[PCH+Modules] Improve diagnosticts to help out users pass an extra header search path
When mixing PCH and Implicit Modules, missing a header search path
can lead to the implicit built PCM to complaint about not finding its
matching module map.
Instead of adding more magic to implicit modules engine, add a note to
help the user add the appropriate path.
rdar://problem/33388847
llvm-svn: 318503
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/Serialization/ASTReader.cpp | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp index 944eeee6b4c..fa853e9ebb6 100644 --- a/clang/lib/Serialization/ASTReader.cpp +++ b/clang/lib/Serialization/ASTReader.cpp @@ -3569,15 +3569,22 @@ ASTReader::ReadModuleMapFileBlock(RecordData &Record, ModuleFile &F, if (!ModMap) { assert(ImportedBy && "top-level import should be verified"); if ((ClientLoadCapabilities & ARR_OutOfDate) == 0) { - if (auto *ASTFE = M ? M->getASTFile() : nullptr) + if (auto *ASTFE = M ? M->getASTFile() : nullptr) { // This module was defined by an imported (explicit) module. Diag(diag::err_module_file_conflict) << F.ModuleName << F.FileName << ASTFE->getName(); - else + } else { // This module was built with a different module map. Diag(diag::err_imported_module_not_found) << F.ModuleName << F.FileName << ImportedBy->FileName << F.ModuleMapPath; + // In case it was imported by a PCH, there's a chance the user is + // just missing to include the search path to the directory containing + // the modulemap. + if (ImportedBy->Kind == MK_PCH) + Diag(diag::note_imported_by_pch_module_not_found) + << llvm::sys::path::parent_path(F.ModuleMapPath); + } } return OutOfDate; } |

