aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Transforms/Utils/Debugify.cpp
diff options
context:
space:
mode:
authorNikola Tesic <nikola.tesic@syrmia.com>2022-09-28 12:32:46 +0200
committerDjordje Todorovic <djordje.todorovic@syrmia.com>2022-09-29 16:48:06 +0200
commitb5d28f3ea5069540584b7f8fdb67ae2b9f79ce1c (patch)
tree37bb010c20a12b5aadda9ae744fc9e541d2d82d3 /llvm/lib/Transforms/Utils/Debugify.cpp
parent02bfe2de7c3eb2f2318fa97bc30b15ea7505a584 (diff)
downloadllvm-b5d28f3ea5069540584b7f8fdb67ae2b9f79ce1c.zip
llvm-b5d28f3ea5069540584b7f8fdb67ae2b9f79ce1c.tar.gz
llvm-b5d28f3ea5069540584b7f8fdb67ae2b9f79ce1c.tar.bz2
[Debugify][OriginalDIMode] Make HTML reporting infrastructure more resilient
Debugify in OriginalDebugInfo mode (verify-each-debuginfo-preserve), when used in parallel builds of large projects, can produce incorrect report. More precisely, simultaneous writes to JSON report file, could form incorrect JSON objects, which describe found Debug Info bugs. This patch uses the lock/unlock mechanism to protect JSON report file and also makes script llvm/utils/llvm-original-di-preservation.py resilient to corrupted lines in the report file. So, it ensures the creation of HTML report. Differential Revision: https://reviews.llvm.org/D115616
Diffstat (limited to 'llvm/lib/Transforms/Utils/Debugify.cpp')
-rw-r--r--llvm/lib/Transforms/Utils/Debugify.cpp16
1 files changed, 10 insertions, 6 deletions
diff --git a/llvm/lib/Transforms/Utils/Debugify.cpp b/llvm/lib/Transforms/Utils/Debugify.cpp
index 24126b5..f17d252 100644
--- a/llvm/lib/Transforms/Utils/Debugify.cpp
+++ b/llvm/lib/Transforms/Utils/Debugify.cpp
@@ -513,15 +513,19 @@ static void writeJSON(StringRef OrigDIVerifyBugsReportFilePath,
return;
}
- OS_FILE << "{\"file\":\"" << FileNameFromCU << "\", ";
+ if (auto L = OS_FILE.lock()) {
+ OS_FILE << "{\"file\":\"" << FileNameFromCU << "\", ";
- StringRef PassName = NameOfWrappedPass != "" ? NameOfWrappedPass : "no-name";
- OS_FILE << "\"pass\":\"" << PassName << "\", ";
+ StringRef PassName =
+ NameOfWrappedPass != "" ? NameOfWrappedPass : "no-name";
+ OS_FILE << "\"pass\":\"" << PassName << "\", ";
- llvm::json::Value BugsToPrint{std::move(Bugs)};
- OS_FILE << "\"bugs\": " << BugsToPrint;
+ llvm::json::Value BugsToPrint{std::move(Bugs)};
+ OS_FILE << "\"bugs\": " << BugsToPrint;
- OS_FILE << "}\n";
+ OS_FILE << "}\n";
+ }
+ OS_FILE.close();
}
bool llvm::checkDebugInfoMetadata(Module &M,