[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