summaryrefslogtreecommitdiffstats
path: root/clang/lib/Headers
diff options
context:
space:
mode:
authorJustin Lebar <jlebar@google.com>2016-02-24 21:49:31 +0000
committerJustin Lebar <jlebar@google.com>2016-02-24 21:49:31 +0000
commitc8dae5378b6e5520e958adf1ae28805916665547 (patch)
tree04a2fbf0db1dbc1f75fd626a9e00bb74be688c19 /clang/lib/Headers
parent048a4c1ca9861ef21787cafb43f68a967a1f9c8d (diff)
downloadbcm5719-llvm-c8dae5378b6e5520e958adf1ae28805916665547.tar.gz
bcm5719-llvm-c8dae5378b6e5520e958adf1ae28805916665547.zip
[CUDA] Add hack so code which includes "curand.h" doesn't break.
Summary: curand.h includes curand_mtgp32_kernel.h. In host mode, this header redefines threadIdx and blockDim, giving them their "proper" types of uint3 and dim3, respectively. clang has its own plan for these variables -- their types are magic builtin classes. So these redefinitions are incompatible. As a hack, we force-include the offending CUDA header and use #defines to get the right types for threadIdx and blockDim. Reviewers: tra Subscribers: echristo, cfe-commits Differential Revision: http://reviews.llvm.org/D17562 llvm-svn: 261776
Diffstat (limited to 'clang/lib/Headers')
-rw-r--r--clang/lib/Headers/__clang_cuda_runtime_wrapper.h14
1 files changed, 14 insertions, 0 deletions
diff --git a/clang/lib/Headers/__clang_cuda_runtime_wrapper.h b/clang/lib/Headers/__clang_cuda_runtime_wrapper.h
index 47cb6a7e6a6..fb527dc9abc 100644
--- a/clang/lib/Headers/__clang_cuda_runtime_wrapper.h
+++ b/clang/lib/Headers/__clang_cuda_runtime_wrapper.h
@@ -247,5 +247,19 @@ __device__ static inline void *malloc(size_t __size) {
#include <__clang_cuda_cmath.h>
+// curand_mtgp32_kernel helpfully redeclares blockDim and threadIdx in host
+// mode, giving them their "proper" types of dim3 and uint3. This is
+// incompatible with the types we give in cuda_builtin_vars.h. As as hack,
+// force-include the header (nvcc doesn't include it by default) but redefine
+// dim3 and uint3 to our builtin types. (Thankfully dim3 and uint3 are only
+// used here for the redeclarations of blockDim and threadIdx.)
+#pragma push_macro("dim3")
+#pragma push_macro("uint3")
+#define dim3 __cuda_builtin_blockDim_t
+#define uint3 __cuda_builtin_threadIdx_t
+#include "curand_mtgp32_kernel.h"
+#pragma pop_macro("dim3")
+#pragma pop_macro("uint3")
+
#endif // __CUDA__
#endif // __CLANG_CUDA_RUNTIME_WRAPPER_H__
OpenPOWER on IntegriCloud