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);


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);
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
  • [PATCH] D146364: [Driver] Fi... Yingwei Zheng via Phabricator via cfe-commits

Reply via email to