[PATCH] D65846: Improve error message from FrontendAction
JF Bastien via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Aug 6 22:37:15 PDT 2019
jfb created this revision.
Herald added subscribers: cfe-commits, dexonsmith.
Herald added a project: clang.
jfb planned changes to this revision.
jfb added a comment.
There's a failure in `clang/test/Index/pch-from-libclang.c`. @thakis disabled that test for all but Darwin in r352809, and with my change I now get:
Internal compiler error: LFS error for "/Users/jfb/s/llvmm/debug/tools/clang/test/Index/Output/pch-from-libclang.c.tmp.mcp/14EC4PG1UTVLY/modules.idx"failed to create unique file /Users/jfb/s/llvmm/debug/tools/clang/test/Index/Output/pch-from-libclang.c.tmp.mcp/14EC4PG1UTVLY/modules.idx.lock-0ae18733: No such file or directory
>From the test, it's the result of running:
/Users/jfb/s/llvmm/debug/bin/clang -fsyntax-only -include /Users/jfb/s/llvmm/debug/tools/clang/test/Index/Output/pch-from-libclang.c.tmp.h /Users/jfb/s/llvmm/clang/test/Index/pch-from-libclang.c -Xclang -verify -fmodules -fmodules-cache-path=/Users/jfb/s/llvmm/debug/tools/clang/test/Index/Output/pch-from-libclang.c.tmp.mcp -Xclang -detailed-preprocessing-record -Xclang -triple -Xclang x86_64-apple-darwin -Xclang -fallow-pch-with-compiler-errors
@akyrtzi do you know what's going on? I haven't investigate yet, and am hoping you'll just know :)
It's called in a few place, and for D63518 <https://reviews.llvm.org/D63518> I initially set all their error propagation to ignore errors so we could propagate them one at a time. This change takes that second step and enables propagation, improving some module-related diagnostics.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D65846
Files:
clang/lib/Frontend/CompilerInstance.cpp
clang/lib/Frontend/FrontendAction.cpp
clang/lib/Serialization/GlobalModuleIndex.cpp
Index: clang/lib/Serialization/GlobalModuleIndex.cpp
===================================================================
--- clang/lib/Serialization/GlobalModuleIndex.cpp
+++ clang/lib/Serialization/GlobalModuleIndex.cpp
@@ -860,7 +860,9 @@
llvm::LockFileManager Locked(IndexPath);
switch (Locked) {
case llvm::LockFileManager::LFS_Error:
- return llvm::createStringError(std::errc::io_error, "LFS error");
+ return llvm::createStringError(
+ std::errc::io_error, "LFS error for \"%s\": %s", IndexPath.c_str(),
+ Locked.getErrorMessage().c_str());
case llvm::LockFileManager::LFS_Owned:
// We're responsible for building the index ourselves. Do so below.
@@ -869,8 +871,10 @@
case llvm::LockFileManager::LFS_Shared:
// Someone else is responsible for building the index. We don't care
// when they finish, so we're done.
- return llvm::createStringError(std::errc::device_or_resource_busy,
- "someone else is building the index");
+ return llvm::createStringError(
+ std::errc::device_or_resource_busy,
+ "someone else is building the index \"%s\": %s", IndexPath.c_str(),
+ Locked.getErrorMessage().c_str());
}
// The module index builder.
Index: clang/lib/Frontend/FrontendAction.cpp
===================================================================
--- clang/lib/Frontend/FrontendAction.cpp
+++ clang/lib/Frontend/FrontendAction.cpp
@@ -940,15 +940,10 @@
CI.hasPreprocessor()) {
StringRef Cache =
CI.getPreprocessor().getHeaderSearchInfo().getModuleCachePath();
- if (!Cache.empty()) {
+ if (!Cache.empty())
if (llvm::Error Err = GlobalModuleIndex::writeIndex(
- CI.getFileManager(), CI.getPCHContainerReader(), Cache)) {
- // FIXME this drops the error on the floor, but
- // Index/pch-from-libclang.c seems to rely on dropping at least some of
- // the error conditions!
- consumeError(std::move(Err));
- }
- }
+ CI.getFileManager(), CI.getPCHContainerReader(), Cache))
+ return Err;
}
return llvm::Error::success();
Index: clang/lib/Frontend/CompilerInstance.cpp
===================================================================
--- clang/lib/Frontend/CompilerInstance.cpp
+++ clang/lib/Frontend/CompilerInstance.cpp
@@ -943,9 +943,8 @@
getSourceManager().clearIDTables();
if (Act.BeginSourceFile(*this, FIF)) {
- if (llvm::Error Err = Act.Execute()) {
- consumeError(std::move(Err)); // FIXME this drops errors on the floor.
- }
+ if (llvm::Error Err = Act.Execute())
+ OS << "Internal compiler error: " << toString(std::move(Err)) << "\n";
Act.EndSourceFile();
}
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D65846.213794.patch
Type: text/x-patch
Size: 2767 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20190807/aeb46e8f/attachment-0001.bin>
More information about the cfe-commits
mailing list