r288448 - [CUDA] "Support" ASAN arguments in CudaToolChain
Hal Finkel via cfe-commits
cfe-commits at lists.llvm.org
Fri Dec 2 04:31:20 PST 2016
----- Original Message -----
> From: "Jason Henline via cfe-commits" <cfe-commits at lists.llvm.org>
> To: cfe-commits at lists.llvm.org
> Sent: Thursday, December 1, 2016 7:42:54 PM
> Subject: r288448 - [CUDA] "Support" ASAN arguments in CudaToolChain
>
> Author: jhen
> Date: Thu Dec 1 19:42:54 2016
> New Revision: 288448
>
> URL: http://llvm.org/viewvc/llvm-project?rev=288448&view=rev
> Log:
> [CUDA] "Support" ASAN arguments in CudaToolChain
>
> This fixes a bug that was introduced in rL287285. The bug made it
> illegal to pass -fsanitize=address during CUDA compilation because
> the
> CudaToolChain class was switched from deriving from the Linux
> toolchain
> class to deriving directly from the ToolChain toolchain class. When
> CudaToolChain derived from Linux, it used Linux's
> getSupportedSanitizers
> method, and that method allowed ASAN, but when it switched to
> deriving
> directly from ToolChain, it inherited a getSupportedSanitizers method
> that didn't allow for ASAN.
>
> This patch fixes that bug by creating a getSupportedSanitizers method
> for CudaToolChain that supports ASAN.
>
> This patch also fixes the test that checks that -fsanitize=address is
> passed correctly for CUDA builds. That test didn't used to notice if
> an
> error message was emitted, and that's why it didn't catch this bug
> when
> it was first introduced. With the fix from this patch, that test will
> now catch any similar bug in the future.
>
> Modified:
> cfe/trunk/lib/Driver/ToolChains.cpp
> cfe/trunk/lib/Driver/ToolChains.h
> cfe/trunk/test/Driver/cuda-no-sanitizers.cu
>
> Modified: cfe/trunk/lib/Driver/ToolChains.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.cpp?rev=288448&r1=288447&r2=288448&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Driver/ToolChains.cpp (original)
> +++ cfe/trunk/lib/Driver/ToolChains.cpp Thu Dec 1 19:42:54 2016
> @@ -4973,6 +4973,15 @@ void CudaToolChain::AddIAMCUIncludeArgs(
> 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;
> +}
I don't understand why only ASAN is enabled. What about TSAN, etc.? Shouldn't you query whatever the host toolchain is?
Thanks again,
Hal
> +
> /// XCore tool chain
> XCoreToolChain::XCoreToolChain(const Driver &D, const llvm::Triple
> &Triple,
> const ArgList &Args)
>
> Modified: cfe/trunk/lib/Driver/ToolChains.h
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.h?rev=288448&r1=288447&r2=288448&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Driver/ToolChains.h (original)
> +++ cfe/trunk/lib/Driver/ToolChains.h Thu Dec 1 19:42:54 2016
> @@ -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;
>
>
> Modified: cfe/trunk/test/Driver/cuda-no-sanitizers.cu
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/cuda-no-sanitizers.cu?rev=288448&r1=288447&r2=288448&view=diff
> ==============================================================================
> --- cfe/trunk/test/Driver/cuda-no-sanitizers.cu (original)
> +++ cfe/trunk/test/Driver/cuda-no-sanitizers.cu Thu Dec 1 19:42:54
> 2016
> @@ -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"
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
--
Hal Finkel
Lead, Compiler Technology and Programming Languages
Leadership Computing Facility
Argonne National Laboratory
More information about the cfe-commits
mailing list