diff --git a/lib/Driver/ToolChains.cpp b/lib/Driver/ToolChains.cpp index 512bebd3f0c1e0f6ef024391d0f7453f3fc94f72..d03e0cbd8ae21d43e0456a943eae6509219f2f46 100644 --- a/lib/Driver/ToolChains.cpp +++ b/lib/Driver/ToolChains.cpp @@ -4973,6 +4973,15 @@ void CudaToolChain::AddIAMCUIncludeArgs(const ArgList &Args, HostTC.AddIAMCUIncludeArgs(Args, CC1Args); } +SanitizerMask CudaToolChain::getSupportedSanitizers() const { + // The CudaToolChain only supports address sanitization in the sense that it + // allows ASAN arguments on the command line. It must not error out on these + // command line arguments because the host code compilation supports them. + // However, it doesn't actually do any address sanitization for device code; + // instead, it just ignores any ASAN command line arguments it sees. + return SanitizerKind::Address; +} + /// XCore tool chain XCoreToolChain::XCoreToolChain(const Driver &D, const llvm::Triple &Triple, const ArgList &Args) diff --git a/lib/Driver/ToolChains.h b/lib/Driver/ToolChains.h index 35543cdb94b8b79ef5a83368413e61e6bc7fbe10..1c1ee21c6d659bfecc77ff07f503f78532e82537 100644 --- a/lib/Driver/ToolChains.h +++ b/lib/Driver/ToolChains.h @@ -912,6 +912,8 @@ public: void AddIAMCUIncludeArgs(const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args) const override; + SanitizerMask getSupportedSanitizers() const override; + const ToolChain &HostTC; CudaInstallationDetector CudaInstallation; diff --git a/test/Driver/cuda-no-sanitizers.cu b/test/Driver/cuda-no-sanitizers.cu index e344f9043ab59fe6e8a017450f7e5c56252459fc..4c01bbdab0f6da9063841636df5746558187a3f3 100644 --- a/test/Driver/cuda-no-sanitizers.cu +++ b/test/Driver/cuda-no-sanitizers.cu @@ -6,6 +6,7 @@ // RUN: %clang -### -target x86_64-linux-gnu -c --cuda-gpu-arch=sm_20 -fsanitize=address %s 2>&1 | \ // RUN: FileCheck %s +// CHECK-NOT: error: // CHECK-DAG: "-fcuda-is-device" // CHECK-NOT: "-fsanitize=address" // CHECK-DAG: "-triple" "x86_64--linux-gnu"