diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -620,7 +620,11 @@ const llvm::vfs::FileSystem &VFS) { if (Arg *A = Args.getLastArg(options::OPT_ffile_compilation_dir_EQ, options::OPT_fdebug_compilation_dir_EQ)) { - A->render(Args, CmdArgs); + if (A->getOption().matches(options::OPT_ffile_compilation_dir_EQ)) + CmdArgs.push_back(Args.MakeArgString(Twine("-fdebug-compilation-dir=") + + A->getValue())); + else + A->render(Args, CmdArgs); } else if (llvm::ErrorOr CWD = VFS.getCurrentWorkingDirectory()) { CmdArgs.push_back(Args.MakeArgString("-fdebug-compilation-dir=" + *CWD)); @@ -862,10 +866,14 @@ if (Arg *A = Args.getLastArg(options::OPT_ffile_compilation_dir_EQ, options::OPT_fcoverage_compilation_dir_EQ)) { - A->render(Args, CmdArgs); + if (A->getOption().matches(options::OPT_ffile_compilation_dir_EQ)) + CmdArgs.push_back(Args.MakeArgString( + Twine("-fcoverage-compilation-dir=") + A->getValue())); + else + A->render(Args, CmdArgs); } else if (llvm::ErrorOr CWD = D.getVFS().getCurrentWorkingDirectory()) { - Args.MakeArgString("-fcoverage-compilation-dir=" + *CWD); + CmdArgs.push_back(Args.MakeArgString("-fcoverage-compilation-dir=" + *CWD)); } if (Args.hasArg(options::OPT_fprofile_exclude_files_EQ)) { diff --git a/clang/test/Driver/clang_f_opts.c b/clang/test/Driver/clang_f_opts.c --- a/clang/test/Driver/clang_f_opts.c +++ b/clang/test/Driver/clang_f_opts.c @@ -500,16 +500,18 @@ // CHECK-CF-PROTECTION-BRANCH: -fcf-protection=branch // CHECK-NO-CF-PROTECTION-BRANCH-NOT: -fcf-protection=branch +// RUN: %clang -### -S -ffile-compilation-dir=. %s 2>&1 | FileCheck -check-prefixes=CHECK-FILE-COMPILATION-DIR,CHECK-DEBUG-COMPILATION-DIR %s +// RUN: %clang -### -ffile-compilation-dir=. -x assembler %s 2>&1 | FileCheck -check-prefixes=CHECK-FILE-COMPILATION-DIR,CHECK-DEBUG-COMPILATION-DIR %s +// CHECK-FILE-COMPILATION-DIR-NOT: "-ffile-compilation-dir=." + // RUN: %clang -### -S -fdebug-compilation-dir . %s 2>&1 | FileCheck -check-prefix=CHECK-DEBUG-COMPILATION-DIR %s // RUN: %clang -### -S -fdebug-compilation-dir=. %s 2>&1 | FileCheck -check-prefix=CHECK-DEBUG-COMPILATION-DIR %s // RUN: %clang -### -fdebug-compilation-dir . -x assembler %s 2>&1 | FileCheck -check-prefix=CHECK-DEBUG-COMPILATION-DIR %s // RUN: %clang -### -fdebug-compilation-dir=. -x assembler %s 2>&1 | FileCheck -check-prefix=CHECK-DEBUG-COMPILATION-DIR %s -// RUN: %clang -### -ffile-compilation-dir=. -x assembler %s 2>&1 | FileCheck -check-prefix=CHECK-FILE-COMPILATION-DIR %s // CHECK-DEBUG-COMPILATION-DIR: "-fdebug-compilation-dir=." -// RUN: %clang -### -S -ffile-compilation-dir=. %s 2>&1 | FileCheck -check-prefix=CHECK-FILE-COMPILATION-DIR %s -// RUN: %clang -### -ffile-compilation-dir=. -x assembler %s 2>&1 | FileCheck -check-prefix=CHECK-FILE-COMPILATION-DIR %s -// CHECK-FILE-COMPILATION-DIR: "-ffile-compilation-dir=." +// RUN: %clang -### -S -fprofile-instr-generate -fcoverage-compilation-dir=. %s 2>&1 | FileCheck -check-prefix=CHECK-COVERAGE-COMPILATION-DIR %s +// CHECK-COVERAGE-COMPILATION-DIR: "-fcoverage-compilation-dir=." // RUN: %clang -### -S -fdiscard-value-names %s 2>&1 | FileCheck -check-prefix=CHECK-DISCARD-NAMES %s // RUN: %clang -### -S -fno-discard-value-names %s 2>&1 | FileCheck -check-prefix=CHECK-NO-DISCARD-NAMES %s