[CUDA] Add Sema::CUDADiagBuilder and Sema::CUDADiagIf{Device,Host}Code().
Summary:
Together these let you easily create diagnostics that
- are never emitted for host code
- are always emitted for __device__ and __global__ functions, and
- are emitted for __host__ __device__ functions iff these functions are
codegen'ed.
At the moment there are only three diagnostics that need this treatment,
but I have more to add, and it's not sustainable to write code for emitting
every such diagnostic twice, and from a special wrapper in SemaCUDA.cpp.
While we're at it, don't emit the function name in
err_cuda_device_exceptions: It's not necessary to print it, and making
this work in the new framework in the face of a null value for
dyn_cast<FunctionDecl>(CurContext) isn't worth the effort.
Reviewers: rnk
Subscribers: cfe-commits, tra
Differential Revision: https://reviews.llvm.org/D25139
llvm-svn: 284143
diff --git a/clang/test/SemaCUDA/exceptions.cu b/clang/test/SemaCUDA/exceptions.cu
index 75586bc..9ed9b69 100644
--- a/clang/test/SemaCUDA/exceptions.cu
+++ b/clang/test/SemaCUDA/exceptions.cu
@@ -9,13 +9,13 @@
}
__device__ void device() {
throw NULL;
- // expected-error@-1 {{cannot use 'throw' in __device__ function 'device'}}
+ // expected-error@-1 {{cannot use 'throw' in __device__ function}}
try {} catch(void*) {}
- // expected-error@-1 {{cannot use 'try' in __device__ function 'device'}}
+ // expected-error@-1 {{cannot use 'try' in __device__ function}}
}
__global__ void kernel() {
throw NULL;
- // expected-error@-1 {{cannot use 'throw' in __global__ function 'kernel'}}
+ // expected-error@-1 {{cannot use 'throw' in __global__ function}}
try {} catch(void*) {}
- // expected-error@-1 {{cannot use 'try' in __global__ function 'kernel'}}
+ // expected-error@-1 {{cannot use 'try' in __global__ function}}
}