[all-commits] [llvm/llvm-project] 721dd3: [analyzer] NFC: Don't regenerate duplicate HTML re...
Artem Dergachev via All-commits
all-commits at lists.llvm.org
Thu Jan 11 15:17:01 PST 2024
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: 721dd3bc2f159f58542653b56ae272f1504875f8
https://github.com/llvm/llvm-project/commit/721dd3bc2f159f58542653b56ae272f1504875f8
Author: Artem Dergachev <adergachev at apple.com>
Date: 2024-01-11 (Thu, 11 Jan 2024)
Changed paths:
M clang/lib/StaticAnalyzer/Core/HTMLDiagnostics.cpp
Log Message:
-----------
[analyzer] NFC: Don't regenerate duplicate HTML reports.
This is a performance optimization for HTML diagnostics output mode.
Currently they're incredibly inefficient:
* The HTMLRewriter is re-run from scratch on every file on every report.
Each such re-run involves re-lexing the entire file and producing
a syntax-highlighted webpage of the entire file, with text behind macros
duplicated as pop-up macro expansion tooltips. Then, warning and note
bubbles are injected into the page. Only the bubble part is different
across reports; everything else can theoretically be cached.
* Additionally, if duplicate reports are emitted (with the same issue hash),
HTMLRewriter will be re-run even though the output file is going to be
discarded due to filename collision. This is mostly an issue for
path-insensitive bug reports because path-sensitive bug reports
are already deduplicated by the BugReporter as part of searching
for the shortest bug path. But on some translation units almost 80% of
bug reports are dry-run here.
We only get away with all this because there are usually very few reports
emitted per file. But if loud checkers are enabled, such as `webkit.*`,
this may explode in complexity and even cause the compiler to run over
the 32-bit SourceLocation addressing limit. (We're re-lexing everything
each time, remember?)
This patch hotfixes the *second* problem. Adds a FIXME for the first problem,
which will require more yak shaving to solve.
rdar://120801986
More information about the All-commits
mailing list