https://github.com/inbelic updated https://github.com/llvm/llvm-project/pull/154454
>From 0f11eb005276c35599216c60653a5126fbd7ed1e Mon Sep 17 00:00:00 2001 From: Finn Plummer <canadienf...@gmail.com> Date: Fri, 8 Aug 2025 17:16:06 +0000 Subject: [PATCH 1/5] add BinaryModifyJobClass --- clang/include/clang/Driver/Action.h | 14 +++++++++++++- clang/lib/Driver/Action.cpp | 7 +++++++ clang/lib/Driver/ToolChain.cpp | 1 + 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/clang/include/clang/Driver/Action.h b/clang/include/clang/Driver/Action.h index 7aecfd886adb8..6fc515f9e4049 100644 --- a/clang/include/clang/Driver/Action.h +++ b/clang/include/clang/Driver/Action.h @@ -76,9 +76,10 @@ class Action { StaticLibJobClass, BinaryAnalyzeJobClass, BinaryTranslatorJobClass, + BinaryModifyJobClass, JobClassFirst = PreprocessJobClass, - JobClassLast = BinaryTranslatorJobClass + JobClassLast = BinaryModifyJobClass }; // The offloading kind determines if this action is binded to a particular @@ -687,6 +688,17 @@ class BinaryTranslatorJobAction : public JobAction { } }; +class BinaryModifyJobAction : public JobAction { + void anchor() override; + +public: + BinaryModifyJobAction(Action *Input, types::ID Type); + + static bool classof(const Action *A) { + return A->getKind() == BinaryModifyJobClass; + } +}; + } // namespace driver } // namespace clang diff --git a/clang/lib/Driver/Action.cpp b/clang/lib/Driver/Action.cpp index ec09726044812..fbf80b3c6f124 100644 --- a/clang/lib/Driver/Action.cpp +++ b/clang/lib/Driver/Action.cpp @@ -52,6 +52,8 @@ const char *Action::getClassName(ActionClass AC) { return "binary-analyzer"; case BinaryTranslatorJobClass: return "binary-translator"; + case BinaryModifyJobClass: + return "binary-modifier"; } llvm_unreachable("invalid class"); @@ -467,3 +469,8 @@ void BinaryTranslatorJobAction::anchor() {} BinaryTranslatorJobAction::BinaryTranslatorJobAction(Action *Input, types::ID Type) : JobAction(BinaryTranslatorJobClass, Input, Type) {} + +void BinaryModifyJobAction::anchor() {} + +BinaryModifyJobAction::BinaryModifyJobAction(Action *Input, types::ID Type) + : JobAction(BinaryModifyJobClass, Input, Type) {} diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp index 7667dbddb0ca2..933015ffcd0ba 100644 --- a/clang/lib/Driver/ToolChain.cpp +++ b/clang/lib/Driver/ToolChain.cpp @@ -652,6 +652,7 @@ Tool *ToolChain::getTool(Action::ActionClass AC) const { case Action::VerifyDebugInfoJobClass: case Action::BinaryAnalyzeJobClass: case Action::BinaryTranslatorJobClass: + case Action::BinaryModifyJobClass: llvm_unreachable("Invalid tool kind."); case Action::CompileJobClass: >From acfd4d525ed9c3e10f781f2c5f6a5f539bc9e7ce Mon Sep 17 00:00:00 2001 From: Finn Plummer <m...@inbelic.dev> Date: Tue, 19 Aug 2025 18:35:51 -0700 Subject: [PATCH 2/5] [HLSL] Add the `Qstrip-rootsignature` DXC driver option --- clang/include/clang/Basic/CodeGenOptions.def | 3 ++ clang/include/clang/Driver/Options.td | 6 +++ clang/lib/Driver/Driver.cpp | 10 +++++ clang/lib/Driver/ToolChains/HLSL.cpp | 41 ++++++++++++++++++- clang/lib/Driver/ToolChains/HLSL.h | 15 +++++++ .../test/Driver/dxc_strip_rootsignature.hlsl | 10 +++++ 6 files changed, 83 insertions(+), 2 deletions(-) create mode 100644 clang/test/Driver/dxc_strip_rootsignature.hlsl diff --git a/clang/include/clang/Basic/CodeGenOptions.def b/clang/include/clang/Basic/CodeGenOptions.def index 423b696785500..89e9f5b5853bb 100644 --- a/clang/include/clang/Basic/CodeGenOptions.def +++ b/clang/include/clang/Basic/CodeGenOptions.def @@ -479,6 +479,9 @@ CODEGENOPT(StaticClosure, 1, 0, Benign) /// Assume that UAVs/SRVs may alias CODEGENOPT(ResMayAlias, 1, 0, Benign) +/// Omit the root signature from produced DXContainer +CODEGENOPT(HLSLRootSigStrip, 1, 0, Benign) + /// Controls how unwind v2 (epilog) information should be generated for x64 /// Windows. ENUM_CODEGENOPT(WinX64EHUnwindV2, WinX64EHUnwindV2Mode, diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index 6a46fec1701f3..6ca63334987ea 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -9404,6 +9404,12 @@ def res_may_alias : Option<["/", "-"], "res-may-alias", KIND_FLAG>, Visibility<[DXCOption, ClangOption, CC1Option]>, HelpText<"Assume that UAVs/SRVs may alias">, MarshallingInfoFlag<CodeGenOpts<"ResMayAlias">>; +def dxc_strip_rootsignature : + Option<["/", "-"], "Qstrip-rootsignature", KIND_FLAG>, + Group<dxc_Group>, + Visibility<[DXCOption]>, + HelpText<"Omit the root signature from produced DXContainer">, + MarshallingInfoFlag<CodeGenOpts<"HLSLRootSigStrip">>; def target_profile : DXCJoinedOrSeparate<"T">, MetaVarName<"<profile>">, HelpText<"Set target profile">, Values<"ps_6_0, ps_6_1, ps_6_2, ps_6_3, ps_6_4, ps_6_5, ps_6_6, ps_6_7," diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index d682ffc832c83..31b59f3759d6e 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -4662,6 +4662,16 @@ void Driver::BuildDefaultActions(Compilation &C, DerivedArgList &Args, Actions.push_back(C.MakeAction<BinaryTranslatorJobAction>( LastAction, types::TY_DX_CONTAINER)); } + if (TC.requiresObjcopy(Args)) { + Action *LastAction = Actions.back(); + // llvm-objcopy expects a DXIL container, which can either be + // validated (in which case they are TY_DX_CONTAINER), or unvalidated + // (TY_OBJECT). + if (LastAction->getType() == types::TY_DX_CONTAINER || + LastAction->getType() == types::TY_Object) + Actions.push_back(C.MakeAction<BinaryModifyJobAction>( + LastAction, types::TY_DX_CONTAINER)); + } } // Claim ignored clang-cl options. diff --git a/clang/lib/Driver/ToolChains/HLSL.cpp b/clang/lib/Driver/ToolChains/HLSL.cpp index 4fedb5dd0ac40..0853c604c09df 100644 --- a/clang/lib/Driver/ToolChains/HLSL.cpp +++ b/clang/lib/Driver/ToolChains/HLSL.cpp @@ -295,6 +295,30 @@ void tools::hlsl::MetalConverter::ConstructJob( Exec, CmdArgs, Inputs, Input)); } +void tools::hlsl::LLVMObjcopy::ConstructJob(Compilation &C, const JobAction &JA, + const InputInfo &Output, + const InputInfoList &Inputs, + const ArgList &Args, + const char *LinkingOutput) const { + + std::string ObjcopyPath = getToolChain().GetProgramPath("llvm-objcopy"); + const char *Exec = Args.MakeArgString(ObjcopyPath); + + ArgStringList CmdArgs; + assert(Inputs.size() == 1 && "Unable to handle multiple inputs."); + const InputInfo &Input = Inputs[0]; + CmdArgs.push_back(Input.getFilename()); + CmdArgs.push_back(Output.getFilename()); + + if (Args.hasArg(options::OPT_dxc_strip_rootsignature)) { + const char *Frs = Args.MakeArgString("--remove-section=RTS0"); + CmdArgs.push_back(Frs); + } + + C.addCommand(std::make_unique<Command>(JA, *this, ResponseFileSupport::None(), + Exec, CmdArgs, Inputs, Input)); +} + /// DirectX Toolchain HLSLToolChain::HLSLToolChain(const Driver &D, const llvm::Triple &Triple, const ArgList &Args) @@ -315,6 +339,10 @@ Tool *clang::driver::toolchains::HLSLToolChain::getTool( if (!MetalConverter) MetalConverter.reset(new tools::hlsl::MetalConverter(*this)); return MetalConverter.get(); + case Action::BinaryModifyJobClass: + if (!LLVMObjcopy) + LLVMObjcopy.reset(new tools::hlsl::LLVMObjcopy(*this)); + return LLVMObjcopy.get(); default: return ToolChain::getTool(AC); } @@ -452,16 +480,25 @@ bool HLSLToolChain::requiresBinaryTranslation(DerivedArgList &Args) const { return Args.hasArg(options::OPT_metal) && Args.hasArg(options::OPT_dxc_Fo); } +bool HLSLToolChain::requiresObjcopy(DerivedArgList &Args) const { + return Args.hasArg(options::OPT_dxc_Fo) && + Args.hasArg(options::OPT_dxc_strip_rootsignature); +} + bool HLSLToolChain::isLastJob(DerivedArgList &Args, Action::ActionClass AC) const { bool HasTranslation = requiresBinaryTranslation(Args); bool HasValidation = requiresValidation(Args); + bool HasObjcopy = requiresObjcopy(Args); // If translation and validation are not required, we should only have one // action. - if (!HasTranslation && !HasValidation) + if (!HasTranslation && !HasValidation && !HasObjcopy) return true; if ((HasTranslation && AC == Action::BinaryTranslatorJobClass) || - (!HasTranslation && HasValidation && AC == Action::BinaryAnalyzeJobClass)) + (!HasTranslation && HasValidation && + AC == Action::BinaryAnalyzeJobClass) || + (!HasTranslation && !HasValidation && HasObjcopy && + AC == Action::BinaryModifyJobClass)) return true; return false; } diff --git a/clang/lib/Driver/ToolChains/HLSL.h b/clang/lib/Driver/ToolChains/HLSL.h index 3824b4252324b..b81141b26b4e6 100644 --- a/clang/lib/Driver/ToolChains/HLSL.h +++ b/clang/lib/Driver/ToolChains/HLSL.h @@ -42,6 +42,19 @@ class LLVM_LIBRARY_VISIBILITY MetalConverter : public Tool { const llvm::opt::ArgList &TCArgs, const char *LinkingOutput) const override; }; + +class LLVM_LIBRARY_VISIBILITY LLVMObjcopy : public Tool { +public: + LLVMObjcopy(const ToolChain &TC) + : Tool("hlsl::LLVMObjcopy", "llvm-objcopy", TC) {} + + bool hasIntegratedCPP() const override { return false; } + + void ConstructJob(Compilation &C, const JobAction &JA, + const InputInfo &Output, const InputInfoList &Inputs, + const llvm::opt::ArgList &TCArgs, + const char *LinkingOutput) const override; +}; } // namespace hlsl } // namespace tools @@ -65,6 +78,7 @@ class LLVM_LIBRARY_VISIBILITY HLSLToolChain : public ToolChain { static std::optional<std::string> parseTargetProfile(StringRef TargetProfile); bool requiresValidation(llvm::opt::DerivedArgList &Args) const; bool requiresBinaryTranslation(llvm::opt::DerivedArgList &Args) const; + bool requiresObjcopy(llvm::opt::DerivedArgList &Args) const; bool isLastJob(llvm::opt::DerivedArgList &Args, Action::ActionClass AC) const; // Set default DWARF version to 4 for DXIL uses version 4. @@ -73,6 +87,7 @@ class LLVM_LIBRARY_VISIBILITY HLSLToolChain : public ToolChain { private: mutable std::unique_ptr<tools::hlsl::Validator> Validator; mutable std::unique_ptr<tools::hlsl::MetalConverter> MetalConverter; + mutable std::unique_ptr<tools::hlsl::LLVMObjcopy> LLVMObjcopy; }; } // end namespace toolchains diff --git a/clang/test/Driver/dxc_strip_rootsignature.hlsl b/clang/test/Driver/dxc_strip_rootsignature.hlsl new file mode 100644 index 0000000000000..23bb39ded8a1b --- /dev/null +++ b/clang/test/Driver/dxc_strip_rootsignature.hlsl @@ -0,0 +1,10 @@ +// RUN: %clang_dxc -Qstrip-rootsignature -T cs_6_0 /Fo %t -### %s 2>&1 | FileCheck %s + +// Test to demonstrate that we specify to the root signature with the +// -Qstrip-rootsignature option + +// CHECK: "{{.*}}llvm-objcopy{{.*}}" "{{.*}}" "{{.*}}" "--remove-section=RTS0" + +[shader("compute"), RootSignature("")] +[numthreads(1,1,1)] +void EmptyEntry() {} >From f3f3a0728a5071fa9f566e83a15a2c0e7caac09f Mon Sep 17 00:00:00 2001 From: Finn Plummer <m...@inbelic.dev> Date: Thu, 21 Aug 2025 11:20:51 -0700 Subject: [PATCH 3/5] review: use terminology directed for objcopy --- clang/include/clang/Driver/Action.h | 10 +++++----- clang/lib/Driver/Action.cpp | 10 +++++----- clang/lib/Driver/Driver.cpp | 4 ++-- clang/lib/Driver/ToolChain.cpp | 2 +- clang/lib/Driver/ToolChains/HLSL.cpp | 16 ++++++++-------- clang/lib/Driver/ToolChains/HLSL.h | 9 +++++---- 6 files changed, 26 insertions(+), 25 deletions(-) diff --git a/clang/include/clang/Driver/Action.h b/clang/include/clang/Driver/Action.h index 6fc515f9e4049..dbf1187da4db9 100644 --- a/clang/include/clang/Driver/Action.h +++ b/clang/include/clang/Driver/Action.h @@ -76,10 +76,10 @@ class Action { StaticLibJobClass, BinaryAnalyzeJobClass, BinaryTranslatorJobClass, - BinaryModifyJobClass, + ObjcopyJobClass, JobClassFirst = PreprocessJobClass, - JobClassLast = BinaryModifyJobClass + JobClassLast = ObjcopyJobClass }; // The offloading kind determines if this action is binded to a particular @@ -688,14 +688,14 @@ class BinaryTranslatorJobAction : public JobAction { } }; -class BinaryModifyJobAction : public JobAction { +class ObjcopyJobAction : public JobAction { void anchor() override; public: - BinaryModifyJobAction(Action *Input, types::ID Type); + ObjcopyJobAction(Action *Input, types::ID Type); static bool classof(const Action *A) { - return A->getKind() == BinaryModifyJobClass; + return A->getKind() == ObjcopyJobClass; } }; diff --git a/clang/lib/Driver/Action.cpp b/clang/lib/Driver/Action.cpp index fbf80b3c6f124..e19daa9cb7abf 100644 --- a/clang/lib/Driver/Action.cpp +++ b/clang/lib/Driver/Action.cpp @@ -52,8 +52,8 @@ const char *Action::getClassName(ActionClass AC) { return "binary-analyzer"; case BinaryTranslatorJobClass: return "binary-translator"; - case BinaryModifyJobClass: - return "binary-modifier"; + case ObjcopyJobClass: + return "objcopy"; } llvm_unreachable("invalid class"); @@ -470,7 +470,7 @@ BinaryTranslatorJobAction::BinaryTranslatorJobAction(Action *Input, types::ID Type) : JobAction(BinaryTranslatorJobClass, Input, Type) {} -void BinaryModifyJobAction::anchor() {} +void ObjcopyJobAction::anchor() {} -BinaryModifyJobAction::BinaryModifyJobAction(Action *Input, types::ID Type) - : JobAction(BinaryModifyJobClass, Input, Type) {} +ObjcopyJobAction::ObjcopyJobAction(Action *Input, types::ID Type) + : JobAction(ObjcopyJobClass, Input, Type) {} diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 31b59f3759d6e..ea7a1b5dd4041 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -4669,8 +4669,8 @@ void Driver::BuildDefaultActions(Compilation &C, DerivedArgList &Args, // (TY_OBJECT). if (LastAction->getType() == types::TY_DX_CONTAINER || LastAction->getType() == types::TY_Object) - Actions.push_back(C.MakeAction<BinaryModifyJobAction>( - LastAction, types::TY_DX_CONTAINER)); + Actions.push_back( + C.MakeAction<ObjcopyJobAction>(LastAction, types::TY_DX_CONTAINER)); } } diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp index 933015ffcd0ba..f645220f30bfd 100644 --- a/clang/lib/Driver/ToolChain.cpp +++ b/clang/lib/Driver/ToolChain.cpp @@ -652,7 +652,7 @@ Tool *ToolChain::getTool(Action::ActionClass AC) const { case Action::VerifyDebugInfoJobClass: case Action::BinaryAnalyzeJobClass: case Action::BinaryTranslatorJobClass: - case Action::BinaryModifyJobClass: + case Action::ObjcopyJobClass: llvm_unreachable("Invalid tool kind."); case Action::CompileJobClass: diff --git a/clang/lib/Driver/ToolChains/HLSL.cpp b/clang/lib/Driver/ToolChains/HLSL.cpp index 0853c604c09df..ad21cf55ffec8 100644 --- a/clang/lib/Driver/ToolChains/HLSL.cpp +++ b/clang/lib/Driver/ToolChains/HLSL.cpp @@ -295,11 +295,11 @@ void tools::hlsl::MetalConverter::ConstructJob( Exec, CmdArgs, Inputs, Input)); } -void tools::hlsl::LLVMObjcopy::ConstructJob(Compilation &C, const JobAction &JA, - const InputInfo &Output, - const InputInfoList &Inputs, - const ArgList &Args, - const char *LinkingOutput) const { +void tools::LLVMObjcopy::ConstructJob(Compilation &C, const JobAction &JA, + const InputInfo &Output, + const InputInfoList &Inputs, + const ArgList &Args, + const char *LinkingOutput) const { std::string ObjcopyPath = getToolChain().GetProgramPath("llvm-objcopy"); const char *Exec = Args.MakeArgString(ObjcopyPath); @@ -339,9 +339,9 @@ Tool *clang::driver::toolchains::HLSLToolChain::getTool( if (!MetalConverter) MetalConverter.reset(new tools::hlsl::MetalConverter(*this)); return MetalConverter.get(); - case Action::BinaryModifyJobClass: + case Action::ObjcopyJobClass: if (!LLVMObjcopy) - LLVMObjcopy.reset(new tools::hlsl::LLVMObjcopy(*this)); + LLVMObjcopy.reset(new tools::LLVMObjcopy(*this)); return LLVMObjcopy.get(); default: return ToolChain::getTool(AC); @@ -498,7 +498,7 @@ bool HLSLToolChain::isLastJob(DerivedArgList &Args, (!HasTranslation && HasValidation && AC == Action::BinaryAnalyzeJobClass) || (!HasTranslation && !HasValidation && HasObjcopy && - AC == Action::BinaryModifyJobClass)) + AC == Action::ObjcopyJobClass)) return true; return false; } diff --git a/clang/lib/Driver/ToolChains/HLSL.h b/clang/lib/Driver/ToolChains/HLSL.h index b81141b26b4e6..36b155baa8f0c 100644 --- a/clang/lib/Driver/ToolChains/HLSL.h +++ b/clang/lib/Driver/ToolChains/HLSL.h @@ -43,10 +43,11 @@ class LLVM_LIBRARY_VISIBILITY MetalConverter : public Tool { const char *LinkingOutput) const override; }; +} // namespace hlsl + class LLVM_LIBRARY_VISIBILITY LLVMObjcopy : public Tool { public: - LLVMObjcopy(const ToolChain &TC) - : Tool("hlsl::LLVMObjcopy", "llvm-objcopy", TC) {} + LLVMObjcopy(const ToolChain &TC) : Tool("LLVMObjcopy", "llvm-objcopy", TC) {} bool hasIntegratedCPP() const override { return false; } @@ -55,7 +56,7 @@ class LLVM_LIBRARY_VISIBILITY LLVMObjcopy : public Tool { const llvm::opt::ArgList &TCArgs, const char *LinkingOutput) const override; }; -} // namespace hlsl + } // namespace tools namespace toolchains { @@ -87,7 +88,7 @@ class LLVM_LIBRARY_VISIBILITY HLSLToolChain : public ToolChain { private: mutable std::unique_ptr<tools::hlsl::Validator> Validator; mutable std::unique_ptr<tools::hlsl::MetalConverter> MetalConverter; - mutable std::unique_ptr<tools::hlsl::LLVMObjcopy> LLVMObjcopy; + mutable std::unique_ptr<tools::LLVMObjcopy> LLVMObjcopy; }; } // end namespace toolchains >From f8ff016249b312d2e1397b10f62d4abbaa371c7f Mon Sep 17 00:00:00 2001 From: Finn Plummer <m...@inbelic.dev> Date: Thu, 21 Aug 2025 11:50:19 -0700 Subject: [PATCH 4/5] review: add assert --- clang/lib/Driver/ToolChains/HLSL.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/clang/lib/Driver/ToolChains/HLSL.cpp b/clang/lib/Driver/ToolChains/HLSL.cpp index ad21cf55ffec8..7274928225fe2 100644 --- a/clang/lib/Driver/ToolChains/HLSL.cpp +++ b/clang/lib/Driver/ToolChains/HLSL.cpp @@ -315,6 +315,8 @@ void tools::LLVMObjcopy::ConstructJob(Compilation &C, const JobAction &JA, CmdArgs.push_back(Frs); } + assert(CmdArgs.size() > 2 && "Unnecessary invocation of objcopy."); + C.addCommand(std::make_unique<Command>(JA, *this, ResponseFileSupport::None(), Exec, CmdArgs, Inputs, Input)); } >From 154c2b0a11132031aa38473c6105636d9de5cb58 Mon Sep 17 00:00:00 2001 From: Finn Plummer <m...@inbelic.dev> Date: Thu, 21 Aug 2025 11:51:43 -0700 Subject: [PATCH 5/5] review: apply objcopy before validation - DXC will invoke the validator after the final blob has been generated (in this case after the part is removed) --- clang/lib/Driver/Driver.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index ea7a1b5dd4041..b266749c4d38c 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -4647,6 +4647,16 @@ void Driver::BuildDefaultActions(Compilation &C, DerivedArgList &Args, // Only add action when needValidation. const auto &TC = static_cast<const toolchains::HLSLToolChain &>(C.getDefaultToolChain()); + if (TC.requiresObjcopy(Args)) { + Action *LastAction = Actions.back(); + // llvm-objcopy expects a DXIL container, which can either be + // validated (in which case they are TY_DX_CONTAINER), or unvalidated + // (TY_OBJECT). + if (LastAction->getType() == types::TY_DX_CONTAINER || + LastAction->getType() == types::TY_Object) + Actions.push_back( + C.MakeAction<ObjcopyJobAction>(LastAction, types::TY_DX_CONTAINER)); + } if (TC.requiresValidation(Args)) { Action *LastAction = Actions.back(); Actions.push_back(C.MakeAction<BinaryAnalyzeJobAction>( @@ -4662,16 +4672,6 @@ void Driver::BuildDefaultActions(Compilation &C, DerivedArgList &Args, Actions.push_back(C.MakeAction<BinaryTranslatorJobAction>( LastAction, types::TY_DX_CONTAINER)); } - if (TC.requiresObjcopy(Args)) { - Action *LastAction = Actions.back(); - // llvm-objcopy expects a DXIL container, which can either be - // validated (in which case they are TY_DX_CONTAINER), or unvalidated - // (TY_OBJECT). - if (LastAction->getType() == types::TY_DX_CONTAINER || - LastAction->getType() == types::TY_Object) - Actions.push_back( - C.MakeAction<ObjcopyJobAction>(LastAction, types::TY_DX_CONTAINER)); - } } // Claim ignored clang-cl options. _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits