diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp b/clang/lib/Driver/ToolChains/CommonArgs.cpp --- a/clang/lib/Driver/ToolChains/CommonArgs.cpp +++ b/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(llvm::sys::path::filename(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); diff --git a/clang/test/Driver/save-stats.c b/clang/test/Driver/save-stats.c --- a/clang/test/Driver/save-stats.c +++ b/clang/test/Driver/save-stats.c @@ -24,8 +24,8 @@ // CHECK-LTO: "-o" "obj/dir{{/|\\\\}}save-stats.exe" // CHECK-LTO: "-plugin-opt=stats-file=save-stats.stats" -// RUN: %clang -target x86_64-linux-unknown -save-stats=obj -flto -o obj/dir/save-stats.exe %s -### 2>&1 | FileCheck %s -check-prefix=CHECK-LTO-OBJ -// CHECK-LTO-OBJ: "-plugin-opt=stats-file=obj/dir{{/|\\\\}}save-stats.stats" +// RUN: %clang -target x86_64-linux-unknown -save-stats=obj -flto -o obj/dir/save-stats-output.exe %s -### 2>&1 | FileCheck %s -check-prefix=CHECK-LTO-OBJ +// CHECK-LTO-OBJ: "-plugin-opt=stats-file=obj/dir{{/|\\\\}}save-stats-output.stats" // RUN: env CC_PRINT_INTERNAL_STAT=1 \ // RUN: %clang -target x86_64-apple-darwin %s -### 2>&1 | FileCheck %s -check-prefix=CHECK-ENV