diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -5664,6 +5664,9 @@ return "-"; } + if (IsDXCMode() && !C.getArgs().hasArg(options::OPT_o)) + return "-"; + // Is this the assembly listing for /FA? if (JA.getType() == types::TY_PP_Asm && (C.getArgs().hasArg(options::OPT__SLASH_FA) || 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 @@ -3513,6 +3513,7 @@ options::OPT_I, options::OPT_S, options::OPT_emit_llvm, + options::OPT_emit_obj, options::OPT_disable_llvm_passes, options::OPT_fnative_half_type, options::OPT_hlsl_entrypoint}; diff --git a/clang/lib/Driver/ToolChains/HLSL.cpp b/clang/lib/Driver/ToolChains/HLSL.cpp --- a/clang/lib/Driver/ToolChains/HLSL.cpp +++ b/clang/lib/Driver/ToolChains/HLSL.cpp @@ -175,6 +175,15 @@ } DAL->append(A); } + + if (DAL->hasArg(options::OPT_o)) { + // When run the whole pipeline. + if (!DAL->hasArg(options::OPT_emit_llvm)) + // Emit obj if write to file. + DAL->AddFlagArg(nullptr, Opts.getOption(options::OPT_emit_obj)); + } else + DAL->AddSeparateArg(nullptr, Opts.getOption(options::OPT_o), "-"); + // Add default validator version if not set. // TODO: remove this once read validator version from validator. if (!DAL->hasArg(options::OPT_dxil_validator_version)) { diff --git a/clang/test/Driver/dxc_Fo.hlsl b/clang/test/Driver/dxc_Fo.hlsl new file mode 100644 --- /dev/null +++ b/clang/test/Driver/dxc_Fo.hlsl @@ -0,0 +1,15 @@ +// RUN: %clang_dxc -T lib_6_7 foo.hlsl -### %s 2>&1 | FileCheck %s --check-prefix=DEFAULT +// RUN: %clang_dxc -fcgl -T lib_6_7 foo.hlsl -### %s 2>&1 | FileCheck %s --check-prefix=FCGL +// RUN: %clang_dxc -T lib_6_7 foo.hlsl -Fo foo.dxc -### %s 2>&1 | FileCheck %s --check-prefix=EMITOBJ + + +// Make sure default use "-" as output and not emit obj. +// DEFAULT-NOT:"-emit-obj" +// DEFAULT:"-o" "-" + +// Make sure -fcgl without -Fo use "-" as output. +// FCGL:"-o" "-" + + +// Make sure emit-obj when set -Fo. +// EMITOBJ:"-emit-obj"