[PATCH] D146364: [Driver] Fix naming conflicts of getStatsFileName when using LTO

Yingwei Zheng via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Sat Mar 18 11:32:20 PDT 2023


dtcxzyw created this revision.
dtcxzyw added reviewers: liaolucy, StephenFan.
Herald added a subscriber: inglorion.
Herald added a project: All.
dtcxzyw requested review of this revision.
Herald added subscribers: cfe-commits, MaskRay.
Herald added a project: clang.

When using `clang` with `-flto=thin -save-stats=obj` to compile a multi-file program, `clang` will save internal statistics during the link time code generation to `<obj_dir>/.stats` because `BaseName` is empty. When multiple binaries are placed in the same directory, conflicts will be caused by identical filenames for statistics. This patch uses the output filename as the base name instead of the input when `-save-stats=obj`.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D146364

Files:
  clang/lib/Driver/ToolChains/CommonArgs.cpp


Index: clang/lib/Driver/ToolChains/CommonArgs.cpp
===================================================================
--- clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -1774,14 +1774,13 @@
     StringRef SaveStats = A->getValue();
     if (SaveStats == "obj" && Output.isFilename()) {
       StatsFile.assign(Output.getFilename());
-      llvm::sys::path::remove_filename(StatsFile);
-    } else if (SaveStats != "cwd") {
+    } else if (SaveStats == "cwd") {
+      StatsFile.assign(Input.getBaseInput());
+    } else {
       D.Diag(diag::err_drv_invalid_value) << A->getAsString(Args) << SaveStats;
       return {};
     }
 
-    StringRef BaseName = llvm::sys::path::filename(Input.getBaseInput());
-    llvm::sys::path::append(StatsFile, BaseName);
     llvm::sys::path::replace_extension(StatsFile, "stats");
   } else {
     assert(D.CCPrintInternalStats);


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D146364.506306.patch
Type: text/x-patch
Size: 912 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20230318/23475974/attachment.bin>


More information about the cfe-commits mailing list