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