Author: Scott Linder Date: 2020-02-21T19:16:59-05:00 New Revision: 340feac6721e840f88c1e77dd79931eea5eaccf3
URL: https://github.com/llvm/llvm-project/commit/340feac6721e840f88c1e77dd79931eea5eaccf3 DIFF: https://github.com/llvm/llvm-project/commit/340feac6721e840f88c1e77dd79931eea5eaccf3.diff LOG: [Driver] Escape the program path for -frecord-command-line Similar to the rest of the command line that is recorded, the program path must also have spaces and backslashes escaped. Without this parsing the recorded command line becomes hard on platforms like Windows where spaces and backslashes are common. This was originally reverted in 577d9ce35532439203411c999deefc9c80e04c69; this version makes a test agnostic to the presence of backslashes in paths on some platforms. Patch By: Ravi Ramaseshan Differential Revision: https://reviews.llvm.org/D74811 Added: Modified: clang/lib/Driver/ToolChains/Clang.cpp clang/test/Driver/clang_f_opts.c Removed: ################################################################################ diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 1091db691858..fc2bb9c60d68 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -5882,7 +5882,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, Arg->render(Args, OriginalArgs); SmallString<256> Flags; - Flags += Exec; + EscapeSpacesAndBackslashes(Exec, Flags); for (const char *OriginalArg : OriginalArgs) { SmallString<128> EscapedArg; EscapeSpacesAndBackslashes(OriginalArg, EscapedArg); @@ -6790,7 +6790,7 @@ void ClangAs::ConstructJob(Compilation &C, const JobAction &JA, SmallString<256> Flags; const char *Exec = getToolChain().getDriver().getClangProgramPath(); - Flags += Exec; + EscapeSpacesAndBackslashes(Exec, Flags); for (const char *OriginalArg : OriginalArgs) { SmallString<128> EscapedArg; EscapeSpacesAndBackslashes(OriginalArg, EscapedArg); diff --git a/clang/test/Driver/clang_f_opts.c b/clang/test/Driver/clang_f_opts.c index 6fb820a9938d..f628f5f40de3 100644 --- a/clang/test/Driver/clang_f_opts.c +++ b/clang/test/Driver/clang_f_opts.c @@ -572,6 +572,11 @@ // CHECK-RECORD-GCC-SWITCHES: "-record-command-line" // CHECK-NO-RECORD-GCC-SWITCHES-NOT: "-record-command-line" // CHECK-RECORD-GCC-SWITCHES-ERROR: error: unsupported option '-frecord-command-line' for target +// Test when clang is in a path containing a space. +// RUN: mkdir -p "%t.r/with spaces" +// RUN: cp %clang "%t.r/with spaces/clang" +// RUN: "%t.r/with spaces/clang" -### -S -target x86_64-unknown-linux -frecord-gcc-switches %s 2>&1 | FileCheck -check-prefix=CHECK-RECORD-GCC-SWITCHES-ESCAPED %s +// CHECK-RECORD-GCC-SWITCHES-ESCAPED: "-record-command-line" "{{.+}}with\\ spaces{{.+}}" // RUN: %clang -### -S -ftrivial-auto-var-init=uninitialized %s 2>&1 | FileCheck -check-prefix=CHECK-TRIVIAL-UNINIT %s // RUN: %clang -### -S -ftrivial-auto-var-init=pattern %s 2>&1 | FileCheck -check-prefix=CHECK-TRIVIAL-PATTERN %s _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits