https://github.com/arsenm updated https://github.com/llvm/llvm-project/pull/196503
>From 18c2de06a722f2e79bef34dc7cb65e9994a0fb29 Mon Sep 17 00:00:00 2001 From: Matt Arsenault <[email protected]> Date: Thu, 7 May 2026 20:31:26 +0100 Subject: [PATCH] clang: Add BoundArch/OffloadKind argument to getSupportedSanitizers Currently the AMDGPU HIP and OpenMP toolchains falsely report all host sanitizers are supported, and then go out of their way to skip forwarding those to the device compiles. Add an offloading kind argument so that in the future this can be handled in one place in the base toolchain. Co-authored-by: Claude Sonnet 4 <[email protected]> --- clang/include/clang/Driver/ToolChain.h | 4 +++- clang/lib/Driver/SanitizerArgs.cpp | 3 ++- clang/lib/Driver/ToolChain.cpp | 4 +++- clang/lib/Driver/ToolChains/AMDGPU.h | 13 +++++++++++-- clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp | 7 +++++-- clang/lib/Driver/ToolChains/AMDGPUOpenMP.h | 4 +++- clang/lib/Driver/ToolChains/BareMetal.cpp | 7 +++++-- clang/lib/Driver/ToolChains/BareMetal.h | 4 +++- clang/lib/Driver/ToolChains/CrossWindows.cpp | 6 ++++-- clang/lib/Driver/ToolChains/CrossWindows.h | 4 +++- clang/lib/Driver/ToolChains/Cuda.cpp | 7 +++++-- clang/lib/Driver/ToolChains/Cuda.h | 4 +++- clang/lib/Driver/ToolChains/Darwin.cpp | 7 +++++-- clang/lib/Driver/ToolChains/Darwin.h | 4 +++- clang/lib/Driver/ToolChains/FreeBSD.cpp | 7 +++++-- clang/lib/Driver/ToolChains/FreeBSD.h | 4 +++- clang/lib/Driver/ToolChains/Fuchsia.cpp | 7 +++++-- clang/lib/Driver/ToolChains/Fuchsia.h | 4 +++- clang/lib/Driver/ToolChains/HIPAMD.cpp | 7 +++++-- clang/lib/Driver/ToolChains/HIPAMD.h | 4 +++- clang/lib/Driver/ToolChains/HIPSPV.cpp | 9 ++++++--- clang/lib/Driver/ToolChains/HIPSPV.h | 4 +++- clang/lib/Driver/ToolChains/Haiku.cpp | 7 +++++-- clang/lib/Driver/ToolChains/Haiku.h | 4 +++- clang/lib/Driver/ToolChains/Linux.cpp | 7 +++++-- clang/lib/Driver/ToolChains/Linux.h | 4 +++- clang/lib/Driver/ToolChains/MSVC.cpp | 6 ++++-- clang/lib/Driver/ToolChains/MSVC.h | 4 +++- clang/lib/Driver/ToolChains/Managarm.cpp | 7 +++++-- clang/lib/Driver/ToolChains/Managarm.h | 4 +++- clang/lib/Driver/ToolChains/MinGW.cpp | 6 ++++-- clang/lib/Driver/ToolChains/MinGW.h | 4 +++- clang/lib/Driver/ToolChains/NetBSD.cpp | 7 +++++-- clang/lib/Driver/ToolChains/NetBSD.h | 4 +++- clang/lib/Driver/ToolChains/OHOS.cpp | 7 +++++-- clang/lib/Driver/ToolChains/OHOS.h | 4 +++- clang/lib/Driver/ToolChains/OpenBSD.cpp | 7 +++++-- clang/lib/Driver/ToolChains/OpenBSD.h | 4 +++- clang/lib/Driver/ToolChains/PS4CPU.cpp | 12 ++++++++---- clang/lib/Driver/ToolChains/PS4CPU.h | 8 ++++++-- clang/lib/Driver/ToolChains/Serenity.cpp | 7 +++++-- clang/lib/Driver/ToolChains/Serenity.h | 4 +++- clang/lib/Driver/ToolChains/Solaris.cpp | 7 +++++-- clang/lib/Driver/ToolChains/Solaris.h | 4 +++- clang/lib/Driver/ToolChains/WebAssembly.cpp | 6 ++++-- clang/lib/Driver/ToolChains/WebAssembly.h | 4 +++- 46 files changed, 190 insertions(+), 72 deletions(-) diff --git a/clang/include/clang/Driver/ToolChain.h b/clang/include/clang/Driver/ToolChain.h index 25f5f83ad7b98..8676318d6f9d4 100644 --- a/clang/include/clang/Driver/ToolChain.h +++ b/clang/include/clang/Driver/ToolChain.h @@ -843,7 +843,9 @@ class ToolChain { llvm::opt::ArgStringList &CmdArgs) const {} /// Return sanitizers which are available in this toolchain. - virtual SanitizerMask getSupportedSanitizers() const; + virtual SanitizerMask + getSupportedSanitizers(StringRef BoundArch, + Action::OffloadKind DeviceOffloadKind) const; /// Return sanitizers which are enabled by default. virtual SanitizerMask getDefaultSanitizers() const { diff --git a/clang/lib/Driver/SanitizerArgs.cpp b/clang/lib/Driver/SanitizerArgs.cpp index 4ae46d0b6c9f1..4bf011ab3dedf 100644 --- a/clang/lib/Driver/SanitizerArgs.cpp +++ b/clang/lib/Driver/SanitizerArgs.cpp @@ -412,7 +412,8 @@ SanitizerArgs::SanitizerArgs(const ToolChain &TC, SanitizerMask IgnoreForUbsanFeature; // Accumulated set of values passed to // `-fsanitize-ignore-for-ubsan-feature`. SanitizerMask Kinds; - const SanitizerMask Supported = setGroupBits(TC.getSupportedSanitizers()); + const SanitizerMask Supported = + setGroupBits(TC.getSupportedSanitizers("", Action::OFK_None)); CfiCrossDso = Args.hasFlag(options::OPT_fsanitize_cfi_cross_dso, options::OPT_fno_sanitize_cfi_cross_dso, false); diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp index 98936b25ce650..6e5148101d4ec 100644 --- a/clang/lib/Driver/ToolChain.cpp +++ b/clang/lib/Driver/ToolChain.cpp @@ -1759,7 +1759,9 @@ ToolChain::getSystemGPUArchs(const llvm::opt::ArgList &Args) const { return SmallVector<std::string>(); } -SanitizerMask ToolChain::getSupportedSanitizers() const { +SanitizerMask +ToolChain::getSupportedSanitizers(StringRef BoundArch, + Action::OffloadKind DeviceOffloadKind) const { // Return sanitizers which don't require runtime support and are not // platform dependent. diff --git a/clang/lib/Driver/ToolChains/AMDGPU.h b/clang/lib/Driver/ToolChains/AMDGPU.h index 20b9365c91bbf..1698786f0e27a 100644 --- a/clang/lib/Driver/ToolChains/AMDGPU.h +++ b/clang/lib/Driver/ToolChains/AMDGPU.h @@ -151,11 +151,20 @@ class LLVM_LIBRARY_VISIBILITY ROCMToolChain : public AMDGPUToolChain { llvm::StringRef GPUArch, Action::OffloadKind DeviceOffloadingKind) const; - SanitizerMask getSupportedSanitizers() const override { + // FIXME: Remove this and make use of OffloadKind argument to + // getSupportedSanitizers + static constexpr SanitizerMask getOffloadSupportedSanitizers() { return SanitizerKind::Address | SanitizerKind::Undefined | SanitizerKind::UndefinedGroup; } + SanitizerMask + getSupportedSanitizers(StringRef BoundArch, + Action::OffloadKind DeviceOffloadKind) const override { + assert(DeviceOffloadKind == Action::OFK_None); + return getOffloadSupportedSanitizers(); + } + bool diagnoseUnsupportedOption(const llvm::opt::Arg *A, const llvm::opt::DerivedArgList &DAL, const llvm::opt::ArgList &DriverArgs, @@ -203,7 +212,7 @@ class LLVM_LIBRARY_VISIBILITY ROCMToolChain : public AMDGPUToolChain { SmallVector<const char *, 4> SupportedSanitizers; SmallVector<const char *, 4> UnSupportedSanitizers; - SanitizerMask Supported = ROCMToolChain::getSupportedSanitizers(); + SanitizerMask Supported = ROCMToolChain::getOffloadSupportedSanitizers(); SanitizerMask SupportedMask; for (const char *Value : A->getValues()) { SanitizerMask K = parseSanitizerValue(Value, /*Allow Groups*/ true); diff --git a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp index 1a30875807d30..226779d9eb80b 100644 --- a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp @@ -105,7 +105,8 @@ void AMDGPUOpenMPToolChain::AddIAMCUIncludeArgs(const ArgList &Args, HostTC.AddIAMCUIncludeArgs(Args, CC1Args); } -SanitizerMask AMDGPUOpenMPToolChain::getSupportedSanitizers() const { +SanitizerMask AMDGPUOpenMPToolChain::getSupportedSanitizers( + StringRef BoundArch, Action::OffloadKind DeviceOffloadKind) const { // The AMDGPUOpenMPToolChain only supports sanitizers in the sense that it // allows sanitizer arguments on the command line if they are supported by the // host toolchain. The AMDGPUOpenMPToolChain will later filter unsupported @@ -114,7 +115,9 @@ SanitizerMask AMDGPUOpenMPToolChain::getSupportedSanitizers() const { // This behavior is necessary because the host and device toolchains // invocations often share the command line, so the device toolchain must // tolerate flags meant only for the host toolchain. - return HostTC.getSupportedSanitizers(); + + // FIXME: Be accurate and use DeviceOffloadKind. + return HostTC.getSupportedSanitizers(BoundArch, DeviceOffloadKind); } VersionTuple diff --git a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.h b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.h index cbafdf57fa466..ff4ba9cc9cda4 100644 --- a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.h +++ b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.h @@ -51,7 +51,9 @@ class LLVM_LIBRARY_VISIBILITY AMDGPUOpenMPToolChain final void AddIAMCUIncludeArgs(const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args) const override; - SanitizerMask getSupportedSanitizers() const override; + SanitizerMask + getSupportedSanitizers(StringRef BoundArch, + Action::OffloadKind DeviceOffloadKind) const override; VersionTuple computeMSVCVersion(const Driver *D, diff --git a/clang/lib/Driver/ToolChains/BareMetal.cpp b/clang/lib/Driver/ToolChains/BareMetal.cpp index 3ba592666647a..4293295f20541 100644 --- a/clang/lib/Driver/ToolChains/BareMetal.cpp +++ b/clang/lib/Driver/ToolChains/BareMetal.cpp @@ -649,12 +649,15 @@ void baremetal::Linker::ConstructJob(Compilation &C, const JobAction &JA, // BareMetal toolchain allows all sanitizers where the compiler generates valid // code, ignoring all runtime library support issues on the assumption that // baremetal targets typically implement their own runtime support. -SanitizerMask BareMetal::getSupportedSanitizers() const { +SanitizerMask +BareMetal::getSupportedSanitizers(StringRef BoundArch, + Action::OffloadKind DeviceOffloadKind) const { const bool IsX86_64 = getTriple().getArch() == llvm::Triple::x86_64; const bool IsAArch64 = getTriple().getArch() == llvm::Triple::aarch64 || getTriple().getArch() == llvm::Triple::aarch64_be; const bool IsRISCV64 = getTriple().isRISCV64(); - SanitizerMask Res = ToolChain::getSupportedSanitizers(); + SanitizerMask Res = + ToolChain::getSupportedSanitizers(BoundArch, DeviceOffloadKind); Res |= SanitizerKind::Address; Res |= SanitizerKind::KernelAddress; Res |= SanitizerKind::PointerCompare; diff --git a/clang/lib/Driver/ToolChains/BareMetal.h b/clang/lib/Driver/ToolChains/BareMetal.h index 57bfb73e3399b..782dc99af129c 100644 --- a/clang/lib/Driver/ToolChains/BareMetal.h +++ b/clang/lib/Driver/ToolChains/BareMetal.h @@ -77,7 +77,9 @@ class LLVM_LIBRARY_VISIBILITY BareMetal : public Generic_ELF { llvm::opt::ArgStringList &CC1Args) const override; std::string computeSysRoot() const override; std::string getCompilerRTPath() const override; - SanitizerMask getSupportedSanitizers() const override; + SanitizerMask + getSupportedSanitizers(StringRef BoundArch, + Action::OffloadKind DeviceOffloadKind) const override; private: std::string SysRoot; diff --git a/clang/lib/Driver/ToolChains/CrossWindows.cpp b/clang/lib/Driver/ToolChains/CrossWindows.cpp index 6df5315e8fff8..5bd1cd46cc080 100644 --- a/clang/lib/Driver/ToolChains/CrossWindows.cpp +++ b/clang/lib/Driver/ToolChains/CrossWindows.cpp @@ -282,8 +282,10 @@ AddCXXStdlibLibArgs(const llvm::opt::ArgList &Args, } } -clang::SanitizerMask CrossWindowsToolChain::getSupportedSanitizers() const { - SanitizerMask Res = ToolChain::getSupportedSanitizers(); +clang::SanitizerMask CrossWindowsToolChain::getSupportedSanitizers( + StringRef BoundArch, Action::OffloadKind DeviceOffloadKind) const { + SanitizerMask Res = + ToolChain::getSupportedSanitizers(BoundArch, DeviceOffloadKind); Res |= SanitizerKind::Address; Res |= SanitizerKind::PointerCompare; Res |= SanitizerKind::PointerSubtract; diff --git a/clang/lib/Driver/ToolChains/CrossWindows.h b/clang/lib/Driver/ToolChains/CrossWindows.h index c5df55a24296f..d6263823759c7 100644 --- a/clang/lib/Driver/ToolChains/CrossWindows.h +++ b/clang/lib/Driver/ToolChains/CrossWindows.h @@ -74,7 +74,9 @@ class LLVM_LIBRARY_VISIBILITY CrossWindowsToolChain : public Generic_GCC { void AddCXXStdlibLibArgs(const llvm::opt::ArgList &Args, llvm::opt::ArgStringList &CmdArgs) const override; - SanitizerMask getSupportedSanitizers() const override; + SanitizerMask + getSupportedSanitizers(StringRef BoundArch, + Action::OffloadKind DeviceOffloadKind) const override; protected: Tool *buildLinker() const override; diff --git a/clang/lib/Driver/ToolChains/Cuda.cpp b/clang/lib/Driver/ToolChains/Cuda.cpp index 2064ba4fc1a9c..c7988911b4044 100644 --- a/clang/lib/Driver/ToolChains/Cuda.cpp +++ b/clang/lib/Driver/ToolChains/Cuda.cpp @@ -1047,7 +1047,8 @@ void CudaToolChain::AddIAMCUIncludeArgs(const ArgList &Args, HostTC.AddIAMCUIncludeArgs(Args, CC1Args); } -SanitizerMask CudaToolChain::getSupportedSanitizers() const { +SanitizerMask CudaToolChain::getSupportedSanitizers( + StringRef BoundArch, Action::OffloadKind DeviceOffloadKind) const { // The CudaToolChain only supports sanitizers in the sense that it allows // sanitizer arguments on the command line if they are supported by the host // toolchain. The CudaToolChain will actually ignore any command line @@ -1057,7 +1058,9 @@ SanitizerMask CudaToolChain::getSupportedSanitizers() const { // This behavior is necessary because the host and device toolchains // invocations often share the command line, so the device toolchain must // tolerate flags meant only for the host toolchain. - return HostTC.getSupportedSanitizers(); + + // FIXME: Be accurate and use DeviceOffloadKind. + return HostTC.getSupportedSanitizers(BoundArch, DeviceOffloadKind); } VersionTuple CudaToolChain::computeMSVCVersion(const Driver *D, diff --git a/clang/lib/Driver/ToolChains/Cuda.h b/clang/lib/Driver/ToolChains/Cuda.h index 6193328908828..386aaf6e6830a 100644 --- a/clang/lib/Driver/ToolChains/Cuda.h +++ b/clang/lib/Driver/ToolChains/Cuda.h @@ -169,7 +169,9 @@ class LLVM_LIBRARY_VISIBILITY CudaToolChain : public NVPTXToolChain { void AddIAMCUIncludeArgs(const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args) const override; - SanitizerMask getSupportedSanitizers() const override; + SanitizerMask + getSupportedSanitizers(StringRef BoundArch, + Action::OffloadKind DeviceOffloadKind) const override; VersionTuple computeMSVCVersion(const Driver *D, diff --git a/clang/lib/Driver/ToolChains/Darwin.cpp b/clang/lib/Driver/ToolChains/Darwin.cpp index 232e6a4e574aa..baec524eeab53 100644 --- a/clang/lib/Driver/ToolChains/Darwin.cpp +++ b/clang/lib/Driver/ToolChains/Darwin.cpp @@ -4040,10 +4040,13 @@ void Darwin::CheckObjCARC() const { getDriver().Diag(diag::err_arc_unsupported_on_toolchain); } -SanitizerMask Darwin::getSupportedSanitizers() const { +SanitizerMask +Darwin::getSupportedSanitizers(StringRef BoundArch, + Action::OffloadKind DeviceOffloadKind) const { const bool IsX86_64 = getTriple().getArch() == llvm::Triple::x86_64; const bool IsAArch64 = getTriple().getArch() == llvm::Triple::aarch64; - SanitizerMask Res = ToolChain::getSupportedSanitizers(); + SanitizerMask Res = + ToolChain::getSupportedSanitizers(BoundArch, DeviceOffloadKind); Res |= SanitizerKind::Address; Res |= SanitizerKind::PointerCompare; Res |= SanitizerKind::PointerSubtract; diff --git a/clang/lib/Driver/ToolChains/Darwin.h b/clang/lib/Driver/ToolChains/Darwin.h index 6d1da017d3df1..d8a6d2e1980b4 100644 --- a/clang/lib/Driver/ToolChains/Darwin.h +++ b/clang/lib/Driver/ToolChains/Darwin.h @@ -652,7 +652,9 @@ class LLVM_LIBRARY_VISIBILITY Darwin : public AppleMachO { bool SupportsEmbeddedBitcode() const override; - SanitizerMask getSupportedSanitizers() const override; + SanitizerMask + getSupportedSanitizers(StringRef BoundArch, + Action::OffloadKind DeviceOffloadKind) const override; }; /// DarwinClang - The Darwin toolchain used by Clang. diff --git a/clang/lib/Driver/ToolChains/FreeBSD.cpp b/clang/lib/Driver/ToolChains/FreeBSD.cpp index 70e66a2f5c3e7..e3189d02eca21 100644 --- a/clang/lib/Driver/ToolChains/FreeBSD.cpp +++ b/clang/lib/Driver/ToolChains/FreeBSD.cpp @@ -477,12 +477,15 @@ bool FreeBSD::isPIEDefault(const llvm::opt::ArgList &Args) const { return getSanitizerArgs(Args).requiresPIE(); } -SanitizerMask FreeBSD::getSupportedSanitizers() const { +SanitizerMask +FreeBSD::getSupportedSanitizers(StringRef BoundArch, + Action::OffloadKind DeviceOffloadKind) const { const bool IsAArch64 = getTriple().getArch() == llvm::Triple::aarch64; const bool IsX86 = getTriple().getArch() == llvm::Triple::x86; const bool IsX86_64 = getTriple().getArch() == llvm::Triple::x86_64; const bool IsMIPS64 = getTriple().isMIPS64(); - SanitizerMask Res = ToolChain::getSupportedSanitizers(); + SanitizerMask Res = + ToolChain::getSupportedSanitizers(BoundArch, DeviceOffloadKind); Res |= SanitizerKind::Address; Res |= SanitizerKind::PointerCompare; Res |= SanitizerKind::PointerSubtract; diff --git a/clang/lib/Driver/ToolChains/FreeBSD.h b/clang/lib/Driver/ToolChains/FreeBSD.h index 60ce0bdbfc31a..79a7dbaafe39e 100644 --- a/clang/lib/Driver/ToolChains/FreeBSD.h +++ b/clang/lib/Driver/ToolChains/FreeBSD.h @@ -86,7 +86,9 @@ class LLVM_LIBRARY_VISIBILITY FreeBSD : public Generic_ELF { UnwindTableLevel getDefaultUnwindTableLevel(const llvm::opt::ArgList &Args) const override; bool isPIEDefault(const llvm::opt::ArgList &Args) const override; - SanitizerMask getSupportedSanitizers() const override; + SanitizerMask + getSupportedSanitizers(StringRef BoundArch, + Action::OffloadKind DeviceOffloadKind) const override; unsigned GetDefaultDwarfVersion() const override { return 4; } // Until dtrace (via CTF) and LLDB can deal with distributed debug info, // FreeBSD defaults to standalone/full debug info. diff --git a/clang/lib/Driver/ToolChains/Fuchsia.cpp b/clang/lib/Driver/ToolChains/Fuchsia.cpp index d4bc589ad4137..fc056fdb0bfcc 100644 --- a/clang/lib/Driver/ToolChains/Fuchsia.cpp +++ b/clang/lib/Driver/ToolChains/Fuchsia.cpp @@ -473,8 +473,11 @@ void Fuchsia::AddCXXStdlibLibArgs(const ArgList &Args, } } -SanitizerMask Fuchsia::getSupportedSanitizers() const { - SanitizerMask Res = ToolChain::getSupportedSanitizers(); +SanitizerMask +Fuchsia::getSupportedSanitizers(StringRef BoundArch, + Action::OffloadKind DeviceOffloadKind) const { + SanitizerMask Res = + ToolChain::getSupportedSanitizers(BoundArch, DeviceOffloadKind); Res |= SanitizerKind::Address; Res |= SanitizerKind::HWAddress; Res |= SanitizerKind::PointerCompare; diff --git a/clang/lib/Driver/ToolChains/Fuchsia.h b/clang/lib/Driver/ToolChains/Fuchsia.h index eb4c8f560d3c0..b81d90001d0a9 100644 --- a/clang/lib/Driver/ToolChains/Fuchsia.h +++ b/clang/lib/Driver/ToolChains/Fuchsia.h @@ -84,7 +84,9 @@ class LLVM_LIBRARY_VISIBILITY Fuchsia : public ToolChain { llvm::StringRef BoundArch, types::ID InputType) const override; - SanitizerMask getSupportedSanitizers() const override; + SanitizerMask + getSupportedSanitizers(StringRef BoundArch, + Action::OffloadKind DeviceOffloadKind) const override; SanitizerMask getDefaultSanitizers() const override; RuntimeLibType diff --git a/clang/lib/Driver/ToolChains/HIPAMD.cpp b/clang/lib/Driver/ToolChains/HIPAMD.cpp index b7732c9274725..81fe156721281 100644 --- a/clang/lib/Driver/ToolChains/HIPAMD.cpp +++ b/clang/lib/Driver/ToolChains/HIPAMD.cpp @@ -357,7 +357,8 @@ void HIPAMDToolChain::AddHIPIncludeArgs(const ArgList &DriverArgs, RocmInstallation->AddHIPIncludeArgs(DriverArgs, CC1Args); } -SanitizerMask HIPAMDToolChain::getSupportedSanitizers() const { +SanitizerMask HIPAMDToolChain::getSupportedSanitizers( + StringRef BoundArch, Action::OffloadKind DeviceOffloadKind) const { // The HIPAMDToolChain only supports sanitizers in the sense that it allows // sanitizer arguments on the command line if they are supported by the host // toolchain. The HIPAMDToolChain will later filter unsupported sanitizers @@ -366,7 +367,9 @@ SanitizerMask HIPAMDToolChain::getSupportedSanitizers() const { // This behavior is necessary because the host and device toolchains // invocations often share the command line, so the device toolchain must // tolerate flags meant only for the host toolchain. - return HostTC.getSupportedSanitizers(); + // + // FIXME: Be accurate and use DeviceOffloadKind. + return HostTC.getSupportedSanitizers(BoundArch, DeviceOffloadKind); } VersionTuple HIPAMDToolChain::computeMSVCVersion(const Driver *D, diff --git a/clang/lib/Driver/ToolChains/HIPAMD.h b/clang/lib/Driver/ToolChains/HIPAMD.h index 7c6540fff235a..d7e10493195ce 100644 --- a/clang/lib/Driver/ToolChains/HIPAMD.h +++ b/clang/lib/Driver/ToolChains/HIPAMD.h @@ -84,7 +84,9 @@ class LLVM_LIBRARY_VISIBILITY HIPAMDToolChain final : public ROCMToolChain { getDeviceLibs(const llvm::opt::ArgList &Args, Action::OffloadKind DeviceOffloadKind) const override; - SanitizerMask getSupportedSanitizers() const override; + SanitizerMask + getSupportedSanitizers(StringRef BoundArch, + Action::OffloadKind DeviceOffloadKind) const override; VersionTuple computeMSVCVersion(const Driver *D, diff --git a/clang/lib/Driver/ToolChains/HIPSPV.cpp b/clang/lib/Driver/ToolChains/HIPSPV.cpp index da601abe4c291..edfb03bd03c84 100644 --- a/clang/lib/Driver/ToolChains/HIPSPV.cpp +++ b/clang/lib/Driver/ToolChains/HIPSPV.cpp @@ -305,7 +305,8 @@ HIPSPVToolChain::getDeviceLibs( return BCLibs; } -SanitizerMask HIPSPVToolChain::getSupportedSanitizers() const { +SanitizerMask HIPSPVToolChain::getSupportedSanitizers( + StringRef BoundArch, Action::OffloadKind DeviceOffloadKind) const { // The HIPSPVToolChain only supports sanitizers in the sense that it allows // sanitizer arguments on the command line if they are supported by the host // toolchain. The HIPSPVToolChain will actually ignore any command line @@ -315,9 +316,11 @@ SanitizerMask HIPSPVToolChain::getSupportedSanitizers() const { // This behavior is necessary because the host and device toolchains // invocations often share the command line, so the device toolchain must // tolerate flags meant only for the host toolchain. + + // FIXME: Be accurate and use DeviceOffloadKind. if (HostTC) - return HostTC->getSupportedSanitizers(); - return ToolChain::getSupportedSanitizers(); + return HostTC->getSupportedSanitizers(BoundArch, DeviceOffloadKind); + return ToolChain::getSupportedSanitizers(BoundArch, DeviceOffloadKind); } VersionTuple HIPSPVToolChain::computeMSVCVersion(const Driver *D, diff --git a/clang/lib/Driver/ToolChains/HIPSPV.h b/clang/lib/Driver/ToolChains/HIPSPV.h index 068040ee4f491..f9e11a7fb6977 100644 --- a/clang/lib/Driver/ToolChains/HIPSPV.h +++ b/clang/lib/Driver/ToolChains/HIPSPV.h @@ -75,7 +75,9 @@ class LLVM_LIBRARY_VISIBILITY HIPSPVToolChain final : public ToolChain { getDeviceLibs(const llvm::opt::ArgList &Args, const Action::OffloadKind DeviceOffloadKind) const override; - SanitizerMask getSupportedSanitizers() const override; + SanitizerMask + getSupportedSanitizers(StringRef BoundArch, + Action::OffloadKind DeviceOffloadKind) const override; VersionTuple computeMSVCVersion(const Driver *D, diff --git a/clang/lib/Driver/ToolChains/Haiku.cpp b/clang/lib/Driver/ToolChains/Haiku.cpp index dd6ada8f56972..6feb632f64bdb 100644 --- a/clang/lib/Driver/ToolChains/Haiku.cpp +++ b/clang/lib/Driver/ToolChains/Haiku.cpp @@ -279,8 +279,11 @@ Tool *Haiku::buildLinker() const { return new tools::haiku::Linker(*this); } bool Haiku::HasNativeLLVMSupport() const { return true; } -SanitizerMask Haiku::getSupportedSanitizers() const { - SanitizerMask Res = ToolChain::getSupportedSanitizers(); +SanitizerMask +Haiku::getSupportedSanitizers(StringRef BoundArch, + Action::OffloadKind DeviceOffloadKind) const { + SanitizerMask Res = + ToolChain::getSupportedSanitizers(BoundArch, DeviceOffloadKind); Res |= SanitizerKind::Address; diff --git a/clang/lib/Driver/ToolChains/Haiku.h b/clang/lib/Driver/ToolChains/Haiku.h index b4b14cf0aeb99..03dbbb8a50e07 100644 --- a/clang/lib/Driver/ToolChains/Haiku.h +++ b/clang/lib/Driver/ToolChains/Haiku.h @@ -61,7 +61,9 @@ class LLVM_LIBRARY_VISIBILITY Haiku : public Generic_ELF { return true; } - SanitizerMask getSupportedSanitizers() const override; + SanitizerMask + getSupportedSanitizers(StringRef BoundArch, + Action::OffloadKind DeviceOffloadKind) const override; unsigned GetDefaultDwarfVersion() const override { return 4; } bool GetDefaultStandaloneDebug() const override { return true; } diff --git a/clang/lib/Driver/ToolChains/Linux.cpp b/clang/lib/Driver/ToolChains/Linux.cpp index 99bcae9bb9598..c4296c25bb9de 100644 --- a/clang/lib/Driver/ToolChains/Linux.cpp +++ b/clang/lib/Driver/ToolChains/Linux.cpp @@ -942,7 +942,9 @@ bool Linux::IsMathErrnoDefault() const { return Generic_ELF::IsMathErrnoDefault(); } -SanitizerMask Linux::getSupportedSanitizers() const { +SanitizerMask +Linux::getSupportedSanitizers(StringRef BoundArch, + Action::OffloadKind DeviceOffloadKind) const { const bool IsX86 = getTriple().getArch() == llvm::Triple::x86; const bool IsX86_64 = getTriple().getArch() == llvm::Triple::x86_64; const bool IsMIPS = getTriple().isMIPS32(); @@ -960,7 +962,8 @@ SanitizerMask Linux::getSupportedSanitizers() const { const bool IsSystemZ = getTriple().getArch() == llvm::Triple::systemz; const bool IsHexagon = getTriple().getArch() == llvm::Triple::hexagon; const bool IsAndroid = getTriple().isAndroid(); - SanitizerMask Res = ToolChain::getSupportedSanitizers(); + SanitizerMask Res = + ToolChain::getSupportedSanitizers(BoundArch, DeviceOffloadKind); Res |= SanitizerKind::Address; Res |= SanitizerKind::PointerCompare; Res |= SanitizerKind::PointerSubtract; diff --git a/clang/lib/Driver/ToolChains/Linux.h b/clang/lib/Driver/ToolChains/Linux.h index cc3f3cc21210f..a8e4b6da3e67e 100644 --- a/clang/lib/Driver/ToolChains/Linux.h +++ b/clang/lib/Driver/ToolChains/Linux.h @@ -51,7 +51,9 @@ class LLVM_LIBRARY_VISIBILITY Linux : public Generic_ELF { IsAArch64OutlineAtomicsDefault(const llvm::opt::ArgList &Args) const override; bool isPIEDefault(const llvm::opt::ArgList &Args) const override; bool IsMathErrnoDefault() const override; - SanitizerMask getSupportedSanitizers() const override; + SanitizerMask + getSupportedSanitizers(StringRef BoundArch, + Action::OffloadKind DeviceOffloadKind) const override; void addProfileRTLibs(const llvm::opt::ArgList &Args, llvm::opt::ArgStringList &CmdArgs) const override; std::string ComputeEffectiveClangTriple( diff --git a/clang/lib/Driver/ToolChains/MSVC.cpp b/clang/lib/Driver/ToolChains/MSVC.cpp index 2ab954ff61414..e80b5c5abc672 100644 --- a/clang/lib/Driver/ToolChains/MSVC.cpp +++ b/clang/lib/Driver/ToolChains/MSVC.cpp @@ -842,8 +842,10 @@ std::string MSVCToolChain::ComputeEffectiveClangTriple( return Triple.getTriple(); } -SanitizerMask MSVCToolChain::getSupportedSanitizers() const { - SanitizerMask Res = ToolChain::getSupportedSanitizers(); +SanitizerMask MSVCToolChain::getSupportedSanitizers( + StringRef BoundArch, Action::OffloadKind DeviceOffloadKind) const { + SanitizerMask Res = + ToolChain::getSupportedSanitizers(BoundArch, DeviceOffloadKind); Res |= SanitizerKind::Address; Res |= SanitizerKind::PointerCompare; Res |= SanitizerKind::PointerSubtract; diff --git a/clang/lib/Driver/ToolChains/MSVC.h b/clang/lib/Driver/ToolChains/MSVC.h index c8e49963a472e..dcf4c0b488171 100644 --- a/clang/lib/Driver/ToolChains/MSVC.h +++ b/clang/lib/Driver/ToolChains/MSVC.h @@ -116,7 +116,9 @@ class LLVM_LIBRARY_VISIBILITY MSVCToolChain : public ToolChain { std::string ComputeEffectiveClangTriple(const llvm::opt::ArgList &Args, llvm::StringRef BoundArch, types::ID InputType) const override; - SanitizerMask getSupportedSanitizers() const override; + SanitizerMask + getSupportedSanitizers(StringRef BoundArch, + Action::OffloadKind DeviceOffloadKind) const override; void printVerboseInfo(raw_ostream &OS) const override; diff --git a/clang/lib/Driver/ToolChains/Managarm.cpp b/clang/lib/Driver/ToolChains/Managarm.cpp index 1bbabdfc631b8..2779136fe9ee3 100644 --- a/clang/lib/Driver/ToolChains/Managarm.cpp +++ b/clang/lib/Driver/ToolChains/Managarm.cpp @@ -197,9 +197,12 @@ void Managarm::addLibStdCxxIncludePaths( addGCCLibStdCxxIncludePaths(DriverArgs, CC1Args); } -SanitizerMask Managarm::getSupportedSanitizers() const { +SanitizerMask +Managarm::getSupportedSanitizers(StringRef BoundArch, + Action::OffloadKind DeviceOffloadKind) const { const bool IsX86_64 = getTriple().getArch() == llvm::Triple::x86_64; - SanitizerMask Res = ToolChain::getSupportedSanitizers(); + SanitizerMask Res = + ToolChain::getSupportedSanitizers(BoundArch, DeviceOffloadKind); Res |= SanitizerKind::PointerCompare; Res |= SanitizerKind::PointerSubtract; Res |= SanitizerKind::KernelAddress; diff --git a/clang/lib/Driver/ToolChains/Managarm.h b/clang/lib/Driver/ToolChains/Managarm.h index 408c0589a3138..52d0e296cddd3 100644 --- a/clang/lib/Driver/ToolChains/Managarm.h +++ b/clang/lib/Driver/ToolChains/Managarm.h @@ -40,7 +40,9 @@ class LLVM_LIBRARY_VISIBILITY Managarm : public Generic_ELF { return true; } - SanitizerMask getSupportedSanitizers() const override; + SanitizerMask + getSupportedSanitizers(StringRef BoundArch, + Action::OffloadKind DeviceOffloadKind) const override; std::string computeSysRoot() const override; std::string getDynamicLinker(const llvm::opt::ArgList &Args) const override; diff --git a/clang/lib/Driver/ToolChains/MinGW.cpp b/clang/lib/Driver/ToolChains/MinGW.cpp index 7f8aec6482b5f..78b15feee37ef 100644 --- a/clang/lib/Driver/ToolChains/MinGW.cpp +++ b/clang/lib/Driver/ToolChains/MinGW.cpp @@ -627,8 +627,10 @@ toolchains::MinGW::GetExceptionModel(const ArgList &Args) const { return llvm::ExceptionHandling::DwarfCFI; } -SanitizerMask toolchains::MinGW::getSupportedSanitizers() const { - SanitizerMask Res = ToolChain::getSupportedSanitizers(); +SanitizerMask toolchains::MinGW::getSupportedSanitizers( + StringRef BoundArch, Action::OffloadKind DeviceOffloadKind) const { + SanitizerMask Res = + ToolChain::getSupportedSanitizers(BoundArch, DeviceOffloadKind); Res |= SanitizerKind::Address; Res |= SanitizerKind::PointerCompare; Res |= SanitizerKind::PointerSubtract; diff --git a/clang/lib/Driver/ToolChains/MinGW.h b/clang/lib/Driver/ToolChains/MinGW.h index 1730da48cd434..ddf9dc500960b 100644 --- a/clang/lib/Driver/ToolChains/MinGW.h +++ b/clang/lib/Driver/ToolChains/MinGW.h @@ -73,7 +73,9 @@ class LLVM_LIBRARY_VISIBILITY MinGW : public ToolChain { bool isPIEDefault(const llvm::opt::ArgList &Args) const override; bool isPICDefaultForced() const override; - SanitizerMask getSupportedSanitizers() const override; + SanitizerMask + getSupportedSanitizers(StringRef BoundArch, + Action::OffloadKind DeviceOffloadKind) const override; llvm::ExceptionHandling GetExceptionModel( const llvm::opt::ArgList &Args) const override; diff --git a/clang/lib/Driver/ToolChains/NetBSD.cpp b/clang/lib/Driver/ToolChains/NetBSD.cpp index ea722b59853d6..feadd4bf7dcc9 100644 --- a/clang/lib/Driver/ToolChains/NetBSD.cpp +++ b/clang/lib/Driver/ToolChains/NetBSD.cpp @@ -531,10 +531,13 @@ llvm::ExceptionHandling NetBSD::GetExceptionModel(const ArgList &Args) const { return llvm::ExceptionHandling::None; } -SanitizerMask NetBSD::getSupportedSanitizers() const { +SanitizerMask +NetBSD::getSupportedSanitizers(StringRef BoundArch, + Action::OffloadKind DeviceOffloadKind) const { const bool IsX86 = getTriple().getArch() == llvm::Triple::x86; const bool IsX86_64 = getTriple().getArch() == llvm::Triple::x86_64; - SanitizerMask Res = ToolChain::getSupportedSanitizers(); + SanitizerMask Res = + ToolChain::getSupportedSanitizers(BoundArch, DeviceOffloadKind); if (IsX86 || IsX86_64) { Res |= SanitizerKind::Address; Res |= SanitizerKind::PointerCompare; diff --git a/clang/lib/Driver/ToolChains/NetBSD.h b/clang/lib/Driver/ToolChains/NetBSD.h index 96303acaa0099..530d3e0f5b1dd 100644 --- a/clang/lib/Driver/ToolChains/NetBSD.h +++ b/clang/lib/Driver/ToolChains/NetBSD.h @@ -76,7 +76,9 @@ class LLVM_LIBRARY_VISIBILITY NetBSD : public Generic_ELF { llvm::ExceptionHandling GetExceptionModel( const llvm::opt::ArgList &Args) const override; - SanitizerMask getSupportedSanitizers() const override; + SanitizerMask + getSupportedSanitizers(StringRef BoundArch, + Action::OffloadKind DeviceOffloadKind) const override; void addClangTargetOptions(const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args, diff --git a/clang/lib/Driver/ToolChains/OHOS.cpp b/clang/lib/Driver/ToolChains/OHOS.cpp index 2a83ef9db59cc..0a7504bffaf79 100644 --- a/clang/lib/Driver/ToolChains/OHOS.cpp +++ b/clang/lib/Driver/ToolChains/OHOS.cpp @@ -379,8 +379,11 @@ void OHOS::addExtraOpts(llvm::opt::ArgStringList &CmdArgs) const { CmdArgs.push_back("--enable-new-dtags"); } -SanitizerMask OHOS::getSupportedSanitizers() const { - SanitizerMask Res = ToolChain::getSupportedSanitizers(); +SanitizerMask +OHOS::getSupportedSanitizers(StringRef BoundArch, + Action::OffloadKind DeviceOffloadKind) const { + SanitizerMask Res = + ToolChain::getSupportedSanitizers(BoundArch, DeviceOffloadKind); Res |= SanitizerKind::Address; Res |= SanitizerKind::PointerCompare; Res |= SanitizerKind::PointerSubtract; diff --git a/clang/lib/Driver/ToolChains/OHOS.h b/clang/lib/Driver/ToolChains/OHOS.h index 0e0543b406069..493ec156dbd26 100644 --- a/clang/lib/Driver/ToolChains/OHOS.h +++ b/clang/lib/Driver/ToolChains/OHOS.h @@ -79,7 +79,9 @@ class LLVM_LIBRARY_VISIBILITY OHOS : public Generic_ELF { const llvm::Triple &TargetTriple, StringRef SysRoot) const override; void addExtraOpts(llvm::opt::ArgStringList &CmdArgs) const override; - SanitizerMask getSupportedSanitizers() const override; + SanitizerMask + getSupportedSanitizers(StringRef BoundArch, + Action::OffloadKind DeviceOffloadKind) const override; void addProfileRTLibs(const llvm::opt::ArgList &Args, llvm::opt::ArgStringList &CmdArgs) const override; path_list getArchSpecificLibPaths() const override; diff --git a/clang/lib/Driver/ToolChains/OpenBSD.cpp b/clang/lib/Driver/ToolChains/OpenBSD.cpp index 5e7b4f1a664e6..9c1e47f4b61fe 100644 --- a/clang/lib/Driver/ToolChains/OpenBSD.cpp +++ b/clang/lib/Driver/ToolChains/OpenBSD.cpp @@ -287,10 +287,13 @@ void openbsd::Linker::ConstructJob(Compilation &C, const JobAction &JA, Exec, CmdArgs, Inputs, Output)); } -SanitizerMask OpenBSD::getSupportedSanitizers() const { +SanitizerMask +OpenBSD::getSupportedSanitizers(StringRef BoundArch, + Action::OffloadKind DeviceOffloadKind) const { const bool IsX86 = getTriple().getArch() == llvm::Triple::x86; const bool IsX86_64 = getTriple().getArch() == llvm::Triple::x86_64; - SanitizerMask Res = ToolChain::getSupportedSanitizers(); + SanitizerMask Res = + ToolChain::getSupportedSanitizers(BoundArch, DeviceOffloadKind); if (IsX86 || IsX86_64) { Res |= SanitizerKind::Vptr; Res |= SanitizerKind::Fuzzer; diff --git a/clang/lib/Driver/ToolChains/OpenBSD.h b/clang/lib/Driver/ToolChains/OpenBSD.h index ad0f9e6799568..3008932b7d757 100644 --- a/clang/lib/Driver/ToolChains/OpenBSD.h +++ b/clang/lib/Driver/ToolChains/OpenBSD.h @@ -97,7 +97,9 @@ class LLVM_LIBRARY_VISIBILITY OpenBSD : public Generic_ELF { } unsigned GetDefaultDwarfVersion() const override { return 2; } - SanitizerMask getSupportedSanitizers() const override; + SanitizerMask + getSupportedSanitizers(StringRef BoundArch, + Action::OffloadKind DeviceOffloadKind) const override; protected: Tool *buildAssembler() const override; diff --git a/clang/lib/Driver/ToolChains/PS4CPU.cpp b/clang/lib/Driver/ToolChains/PS4CPU.cpp index ac2671a8e8078..8c281f60ae90a 100644 --- a/clang/lib/Driver/ToolChains/PS4CPU.cpp +++ b/clang/lib/Driver/ToolChains/PS4CPU.cpp @@ -560,8 +560,10 @@ Tool *toolchains::PS5CPU::buildLinker() const { return new tools::PS5cpu::Linker(*this); } -SanitizerMask toolchains::PS4PS5Base::getSupportedSanitizers() const { - SanitizerMask Res = ToolChain::getSupportedSanitizers(); +SanitizerMask toolchains::PS4PS5Base::getSupportedSanitizers( + StringRef BoundArch, Action::OffloadKind DeviceOffloadKind) const { + SanitizerMask Res = + ToolChain::getSupportedSanitizers(BoundArch, DeviceOffloadKind); Res |= SanitizerKind::Address; Res |= SanitizerKind::PointerCompare; Res |= SanitizerKind::PointerSubtract; @@ -569,8 +571,10 @@ SanitizerMask toolchains::PS4PS5Base::getSupportedSanitizers() const { return Res; } -SanitizerMask toolchains::PS5CPU::getSupportedSanitizers() const { - SanitizerMask Res = PS4PS5Base::getSupportedSanitizers(); +SanitizerMask toolchains::PS5CPU::getSupportedSanitizers( + StringRef BoundArch, Action::OffloadKind DeviceOffloadKind) const { + SanitizerMask Res = + PS4PS5Base::getSupportedSanitizers(BoundArch, DeviceOffloadKind); Res |= SanitizerKind::Thread; return Res; } diff --git a/clang/lib/Driver/ToolChains/PS4CPU.h b/clang/lib/Driver/ToolChains/PS4CPU.h index 456e966c2d400..e555847b7d5c4 100644 --- a/clang/lib/Driver/ToolChains/PS4CPU.h +++ b/clang/lib/Driver/ToolChains/PS4CPU.h @@ -106,7 +106,9 @@ class LLVM_LIBRARY_VISIBILITY PS4PS5Base : public Generic_ELF { return llvm::DebuggerKind::SCE; } - SanitizerMask getSupportedSanitizers() const override; + SanitizerMask + getSupportedSanitizers(StringRef BoundArch, + Action::OffloadKind DeviceOffloadKind) const override; void addClangTargetOptions( const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args, @@ -172,7 +174,9 @@ class LLVM_LIBRARY_VISIBILITY PS5CPU : public PS4PS5Base { unsigned GetDefaultDwarfVersion() const override { return 5; } - SanitizerMask getSupportedSanitizers() const override; + SanitizerMask + getSupportedSanitizers(StringRef BoundArch, + Action::OffloadKind DeviceOffloadKind) const override; const char *getLinkerBaseName() const override { return "lld"; } std::string qualifyPSCmdName(StringRef CmdName) const override { diff --git a/clang/lib/Driver/ToolChains/Serenity.cpp b/clang/lib/Driver/ToolChains/Serenity.cpp index 7c29b7c932be4..001765e45f73d 100644 --- a/clang/lib/Driver/ToolChains/Serenity.cpp +++ b/clang/lib/Driver/ToolChains/Serenity.cpp @@ -167,8 +167,11 @@ void tools::serenity::Linker::ConstructJob(Compilation &C, const JobAction &JA, Exec, CmdArgs, Inputs, Output)); } -SanitizerMask Serenity::getSupportedSanitizers() const { - return ToolChain::getSupportedSanitizers() | SanitizerKind::KernelAddress; +SanitizerMask +Serenity::getSupportedSanitizers(StringRef BoundArch, + Action::OffloadKind DeviceOffloadKind) const { + return ToolChain::getSupportedSanitizers(BoundArch, DeviceOffloadKind) | + SanitizerKind::KernelAddress; } Serenity::Serenity(const Driver &D, const llvm::Triple &Triple, diff --git a/clang/lib/Driver/ToolChains/Serenity.h b/clang/lib/Driver/ToolChains/Serenity.h index fb77dd6a6eef2..3ecd6c6b4f4a5 100644 --- a/clang/lib/Driver/ToolChains/Serenity.h +++ b/clang/lib/Driver/ToolChains/Serenity.h @@ -64,7 +64,9 @@ class LLVM_LIBRARY_VISIBILITY Serenity final : public Generic_ELF { bool isPICDefault() const override { return true; } bool isPIEDefault(const llvm::opt::ArgList &) const override { return true; } - SanitizerMask getSupportedSanitizers() const override; + SanitizerMask + getSupportedSanitizers(StringRef BoundArch, + Action::OffloadKind DeviceOffloadKind) const override; bool IsMathErrnoDefault() const override { return false; } diff --git a/clang/lib/Driver/ToolChains/Solaris.cpp b/clang/lib/Driver/ToolChains/Solaris.cpp index ad0f41144f393..9af721ecd053e 100644 --- a/clang/lib/Driver/ToolChains/Solaris.cpp +++ b/clang/lib/Driver/ToolChains/Solaris.cpp @@ -328,10 +328,13 @@ Solaris::Solaris(const Driver &D, const llvm::Triple &Triple, addPathIfExists(D, D.SysRoot + "/usr/lib" + LibSuffix, Paths); } -SanitizerMask Solaris::getSupportedSanitizers() const { +SanitizerMask +Solaris::getSupportedSanitizers(StringRef BoundArch, + Action::OffloadKind DeviceOffloadKind) const { const bool IsSparc = getTriple().getArch() == llvm::Triple::sparc; const bool IsX86 = getTriple().getArch() == llvm::Triple::x86; - SanitizerMask Res = ToolChain::getSupportedSanitizers(); + SanitizerMask Res = + ToolChain::getSupportedSanitizers(BoundArch, DeviceOffloadKind); // FIXME: Omit SparcV9 and X86_64 until 64-bit support is figured out. if (IsSparc || IsX86) { Res |= SanitizerKind::Address; diff --git a/clang/lib/Driver/ToolChains/Solaris.h b/clang/lib/Driver/ToolChains/Solaris.h index 9ec83b773da44..c31463ee8e13a 100644 --- a/clang/lib/Driver/ToolChains/Solaris.h +++ b/clang/lib/Driver/ToolChains/Solaris.h @@ -64,7 +64,9 @@ class LLVM_LIBRARY_VISIBILITY Solaris : public Generic_ELF { addLibStdCxxIncludePaths(const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args) const override; - SanitizerMask getSupportedSanitizers() const override; + SanitizerMask + getSupportedSanitizers(StringRef BoundArch, + Action::OffloadKind DeviceOffloadKind) const override; const char *getDefaultLinker() const override; diff --git a/clang/lib/Driver/ToolChains/WebAssembly.cpp b/clang/lib/Driver/ToolChains/WebAssembly.cpp index e532ef0743cc2..56913778d453f 100644 --- a/clang/lib/Driver/ToolChains/WebAssembly.cpp +++ b/clang/lib/Driver/ToolChains/WebAssembly.cpp @@ -560,8 +560,10 @@ void WebAssembly::AddCXXStdlibLibArgs(const llvm::opt::ArgList &Args, } } -SanitizerMask WebAssembly::getSupportedSanitizers() const { - SanitizerMask Res = ToolChain::getSupportedSanitizers(); +SanitizerMask WebAssembly::getSupportedSanitizers( + StringRef BoundArch, Action::OffloadKind DeviceOffloadKind) const { + SanitizerMask Res = + ToolChain::getSupportedSanitizers(BoundArch, DeviceOffloadKind); if (getTriple().isOSEmscripten()) { Res |= SanitizerKind::Vptr | SanitizerKind::Leak; } diff --git a/clang/lib/Driver/ToolChains/WebAssembly.h b/clang/lib/Driver/ToolChains/WebAssembly.h index 76e0ca39bd748..4727e22937e4e 100644 --- a/clang/lib/Driver/ToolChains/WebAssembly.h +++ b/clang/lib/Driver/ToolChains/WebAssembly.h @@ -65,7 +65,9 @@ class LLVM_LIBRARY_VISIBILITY WebAssembly final : public ToolChain { llvm::opt::ArgStringList &CC1Args) const override; void AddCXXStdlibLibArgs(const llvm::opt::ArgList &Args, llvm::opt::ArgStringList &CmdArgs) const override; - SanitizerMask getSupportedSanitizers() const override; + SanitizerMask + getSupportedSanitizers(StringRef BoundArch, + Action::OffloadKind DeviceOffloadKind) const override; const char *getDefaultLinker() const override; _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
