[PATCH] D128704: [clang-extdef-mapping] Directly process .ast files

Gabor Marton via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Jul 1 07:18:30 PDT 2022


martong added a comment.

Thanks, this is a great addition!

- Please use Capitalized names for all the variables (as per the LLVM coding standards suggests here <https://llvm.org/docs/CodingStandards.html#name-types-functions-variables-and-enumerators-properly>).
- Could you please update the release notes part of Clang Static Analyzer as this is a cool user facing change.

> I tried this on llvm/lib/AsmParser/Parser.cpp and running extdef-mapping on the .cpp file took 5.4s on my machine. While running it on the .ast file it took 2s.

I am wondering if you could have a comparison on more files? I think a measurement run on all `clang` source/ast files comparing the overall run-time could be even more persuasive.



================
Comment at: clang/tools/clang-extdef-mapping/ClangExtDefMapGen.cpp:124-129
+  IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts = new DiagnosticOptions();
+  TextDiagnosticPrinter *DiagClient =
+      new TextDiagnosticPrinter(llvm::errs(), &*DiagOpts);
+  IntrusiveRefCntPtr<DiagnosticIDs> DiagID(new DiagnosticIDs());
+  IntrusiveRefCntPtr<DiagnosticsEngine> Diags(
+      new DiagnosticsEngine(DiagID, &*DiagOpts, DiagClient));
----------------
Is there a way to reuse the `DiagOpts` (and the other Diag variables) over the multiple `HandleAST` calls? If not then we might use smart pointers to avoid leaking.


================
Comment at: clang/tools/clang-extdef-mapping/ClangExtDefMapGen.cpp:142-143
+
+  std::unique_ptr<MapExtDefNamesConsumer> consumer =
+      std::make_unique<MapExtDefNamesConsumer>(unit->getASTContext(), absPath);
+  consumer->HandleTranslationUnit(unit->getASTContext());
----------------
Could this be a simple non-pointer variable?


================
Comment at: clang/tools/clang-extdef-mapping/ClangExtDefMapGen.cpp:151
+                       CompilationDatabase &compilations) {
+  std::vector<std::string> sourceToBeParsed;
+  for (StringRef src : sourceFiles) {
----------------
I'd rather use a plural from here, there might be more than one source files.


================
Comment at: clang/tools/clang-extdef-mapping/ClangExtDefMapGen.cpp:152
+  std::vector<std::string> sourceToBeParsed;
+  for (StringRef src : sourceFiles) {
+    if (src.endswith(".ast")) {
----------------
Could you please add a one-liner explanatory comment for this loop?


================
Comment at: clang/tools/clang-extdef-mapping/ClangExtDefMapGen.cpp:175-177
   const char *Overview = "\nThis tool collects the USR name and location "
                          "of external definitions in the source files "
                          "(excluding headers).\n";
----------------
Could you please extend the documentation of the tool with the new behavior?


================
Comment at: clang/tools/clang-extdef-mapping/ClangExtDefMapGen.cpp:122
+
+  CompilerInstance CI;
+
----------------
thieta wrote:
> Not sure if I can just create a compilerinstance here and if I should feed it anymore data then I already do.
I think it is okay to create the `CI` like you do. However, it would be enough to create that only once, not in every `HandleAST` call. Perhaps, it could be `static` or you might pass a reference to it from `main`.


================
Comment at: clang/tools/clang-extdef-mapping/ClangExtDefMapGen.cpp:136
+  FileManager fm(CI.getFileSystemOpts());
+  SmallString<128> absPath(astPath);
+  fm.makeAbsolutePath(absPath);
----------------
thieta wrote:
> thieta wrote:
> > Pretty sure 128 is wrong here - but I searched the codebase and that seems to be the most common size used? I couldn't find anything using PATH_MAX or something like that.
> Never mind 128 is just the default size not the absolute size. Got it.
128 looks good to me.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D128704



More information about the cfe-commits mailing list