diff options
author | Nikola Tesic <nikola.tesic@syrmia.com> | 2022-09-28 12:32:46 +0200 |
---|---|---|
committer | Djordje Todorovic <djordje.todorovic@syrmia.com> | 2022-09-29 16:48:06 +0200 |
commit | b5d28f3ea5069540584b7f8fdb67ae2b9f79ce1c (patch) | |
tree | 37bb010c20a12b5aadda9ae744fc9e541d2d82d3 /llvm/lib/Transforms/Utils/Debugify.cpp | |
parent | 02bfe2de7c3eb2f2318fa97bc30b15ea7505a584 (diff) | |
download | llvm-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.cpp | 16 |
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, |