summaryrefslogtreecommitdiffstats
path: root/clang/lib/Driver/ToolChains.cpp
diff options
context:
space:
mode:
authorJason Henline <jhen@google.com>2016-12-02 01:42:54 +0000
committerJason Henline <jhen@google.com>2016-12-02 01:42:54 +0000
commitc3e24403f0c933a9e3fac6689ea008c097f424e2 (patch)
tree899a848155833962a72cbdca46d7ec399fcb8812 /clang/lib/Driver/ToolChains.cpp
parentd0eed81dc0554b190ccb6458f213039fa4235b69 (diff)
downloadbcm5719-llvm-c3e24403f0c933a9e3fac6689ea008c097f424e2.tar.gz
bcm5719-llvm-c3e24403f0c933a9e3fac6689ea008c097f424e2.zip
[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. llvm-svn: 288448
Diffstat (limited to 'clang/lib/Driver/ToolChains.cpp')
-rw-r--r--clang/lib/Driver/ToolChains.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/clang/lib/Driver/ToolChains.cpp b/clang/lib/Driver/ToolChains.cpp
index 512bebd3f0c..d03e0cbd8ae 100644
--- a/clang/lib/Driver/ToolChains.cpp
+++ b/clang/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)
OpenPOWER on IntegriCloud