summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorArtem Belevich <tra@google.com>2018-01-23 19:08:18 +0000
committerArtem Belevich <tra@google.com>2018-01-23 19:08:18 +0000
commit5ecdb94487bb3afb98e1ec853aefd5820418651c (patch)
tree4947c41d51c53338859e3573ad83301ab07bed69 /clang/lib
parent1c7c45688c857427738e62b3bf573c5bb2bcee8b (diff)
downloadbcm5719-llvm-5ecdb94487bb3afb98e1ec853aefd5820418651c.tar.gz
bcm5719-llvm-5ecdb94487bb3afb98e1ec853aefd5820418651c.zip
[CUDA] CUDA has no device-side library builtins.
We should (almost) never consider a device-side declaration to match a library builtin functio. Otherwise clang may ignore the implementation provided by the CUDA headers and emit clang's idea of the builtin. Differential Revision: https://reviews.llvm.org/D42319 llvm-svn: 323239
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/AST/Decl.cpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/clang/lib/AST/Decl.cpp b/clang/lib/AST/Decl.cpp
index 918466236bf..f8010695c90 100644
--- a/clang/lib/AST/Decl.cpp
+++ b/clang/lib/AST/Decl.cpp
@@ -2901,6 +2901,13 @@ unsigned FunctionDecl::getBuiltinID() const {
Context.BuiltinInfo.isPredefinedLibFunction(BuiltinID))
return 0;
+ // CUDA does not have device-side standard library. printf and malloc are the
+ // only special cases that are supported by device-side runtime.
+ if (Context.getLangOpts().CUDA && hasAttr<CUDADeviceAttr>() &&
+ !hasAttr<CUDAHostAttr>() &&
+ !(BuiltinID == Builtin::BIprintf || BuiltinID == Builtin::BImalloc))
+ return 0;
+
return BuiltinID;
}
OpenPOWER on IntegriCloud