[PATCH] D85319: [analyzer] Get info from the LLVM IR for precision

Whisperity via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Aug 5 09:01:16 PDT 2020


whisperity added subscribers: dcoughlin, rjmccall, rsmith.
whisperity added a comment.

What will happen with the ability to analyse a translation unit whose target was not part of `LLVM_TARGETS_TO_BUILD` of the current `clang` binary? Will it break, because the binary lacks the information on how to generate for the given target?



================
Comment at: clang/include/clang/StaticAnalyzer/Core/IRContext.h:39-41
+  // Get the LLVM code for a function. We use the complete versions of the
+  // constructors and desctructors in this overload. Use the other overload to
+  // get the base object ctor/dtor.
----------------
Aren't documentation comments in LLVM `///`?


================
Comment at: clang/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp:127
         PP(CI.getPreprocessor()), OutDir(outdir), Opts(std::move(opts)),
-        Plugins(plugins), Injector(injector), CTU(CI) {
+        Plugins(plugins), Injector(injector), CTU(CI), IRCtx(CG) {
     DigestAnalyzerOptions();
----------------
Where's this `CG` defined?


================
Comment at: clang/lib/StaticAnalyzer/Frontend/FrontendActions.cpp:53-57
+    LLVMCtx = std::make_shared<llvm::LLVMContext>();
+    auto CGConsumer = BuildCodeGen(CI, *LLVMCtx, *CodeGenDiags);
+    AConsumer->setCodeGen(CGConsumer.get());
+    ASTConsumers.push_back(std::move(CGConsumer));
+  }
----------------
Isn't there a lifetime issue here? `LLVMCtx` is given as a raw reference to the `BuildCodeGen` and the shared pointer leaves scope at the end of the branch.


================
Comment at: clang/test/Analysis/ircontext.cpp:17-18
+  int l = 0;
+  foo(&l);
+  clang_analyzer_eval(g == 3); // expected-warning{{TRUE}}
+}
----------------
What are we testing here? Without the ability to read the pureness of `foo` from the IR, the knowledge about `g`'s value would be scrapped at the call? `foo` is defined in the current TU.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D85319/new/

https://reviews.llvm.org/D85319



More information about the cfe-commits mailing list