clang-cl: Ignore the /o option when /P is specified.

This matches the cl.exe behavior (tested with 18.00.31101).  In order to
specify an output file for /P, use the /Fi option instead.

Differential Revision: http://reviews.llvm.org/D10313

llvm-svn: 239393
This commit is contained in:
Greg Bedwell 2015-06-09 10:24:06 +00:00
parent 0389d66b0c
commit 065f70ae80
2 changed files with 7 additions and 15 deletions

View File

@ -1692,8 +1692,7 @@ const char *Driver::GetNamedOutputPath(Compilation &C,
assert(AtTopLevel && isa<PreprocessJobAction>(JA)); assert(AtTopLevel && isa<PreprocessJobAction>(JA));
StringRef BaseName = llvm::sys::path::filename(BaseInput); StringRef BaseName = llvm::sys::path::filename(BaseInput);
StringRef NameArg; StringRef NameArg;
if (Arg *A = C.getArgs().getLastArg(options::OPT__SLASH_Fi, if (Arg *A = C.getArgs().getLastArg(options::OPT__SLASH_Fi))
options::OPT__SLASH_o))
NameArg = A->getValue(); NameArg = A->getValue();
return C.addResultFile(MakeCLOutputFilename(C.getArgs(), NameArg, BaseName, return C.addResultFile(MakeCLOutputFilename(C.getArgs(), NameArg, BaseName,
types::TY_PP_C), &JA); types::TY_PP_C), &JA);

View File

@ -249,22 +249,15 @@
// Fi2: "-E" // Fi2: "-E"
// Fi2: "-o" "foo.x" // Fi2: "-o" "foo.x"
// To match MSVC behavior /o should be ignored for /P output.
// RUN: %clang_cl /P /ofoo -### -- %s 2>&1 | FileCheck -check-prefix=Fio1 %s // RUN: %clang_cl /P /ofoo -### -- %s 2>&1 | FileCheck -check-prefix=Fio1 %s
// Fio1: "-E" // Fio1: "-E"
// Fio1: "-o" "foo.i" // Fio1: "-o" "cl-outputs.i"
// RUN: %clang_cl /P /o foo -### -- %s 2>&1 | FileCheck -check-prefix=Fio2 %s // RUN: %clang_cl /P /o foo.x -### -- %s 2>&1 | FileCheck -check-prefix=Fio2 %s
// Fio2: "-E" // Fio2: "-E"
// Fio2: "-o" "foo.i" // Fio2: "-o" "cl-outputs.i"
// RUN: %clang_cl /P /ofoo.x -### -- %s 2>&1 | FileCheck -check-prefix=Fio3 %s
// Fio3: "-E"
// Fio3: "-o" "foo.x"
// RUN: %clang_cl /P /o foo.x -### -- %s 2>&1 | FileCheck -check-prefix=Fio4 %s
// Fio4: "-E"
// Fio4: "-o" "foo.x"
// RUN: %clang_cl /P /obar.x /Fifoo.x -### -- %s 2>&1 | FileCheck -check-prefix=FioRACE1 %s // RUN: %clang_cl /P /obar.x /Fifoo.x -### -- %s 2>&1 | FileCheck -check-prefix=FioRACE1 %s
// FioRACE1: "-E" // FioRACE1: "-E"
@ -272,7 +265,7 @@
// RUN: %clang_cl /P /Fifoo.x /obar.x -### -- %s 2>&1 | FileCheck -check-prefix=FioRACE2 %s // RUN: %clang_cl /P /Fifoo.x /obar.x -### -- %s 2>&1 | FileCheck -check-prefix=FioRACE2 %s
// FioRACE2: "-E" // FioRACE2: "-E"
// FioRACE2: "-o" "bar.x" // FioRACE2: "-o" "foo.x"
// RUN: %clang_cl /c /GL -### -- %s 2>&1 | FileCheck -check-prefix=LTO-DEFAULT %s // RUN: %clang_cl /c /GL -### -- %s 2>&1 | FileCheck -check-prefix=LTO-DEFAULT %s
// LTO-DEFAULT: "-emit-llvm-bc"{{.*}}"-o" "cl-outputs.obj" // LTO-DEFAULT: "-emit-llvm-bc"{{.*}}"-o" "cl-outputs.obj"