// RUN: %clang_cc1 -std=c++11 -fcxx-exceptions -fexceptions -fcuda-is-device \ // RUN: -triple nvptx-nvidia-cuda -emit-llvm -disable-llvm-passes -o - %s | \ // RUN: FileCheck -check-prefix DEVICE %s // RUN: %clang_cc1 -std=c++11 -fcxx-exceptions -fexceptions \ // RUN: -triple x86_64-unknown-linux-gnu -emit-llvm -disable-llvm-passes -o - %s | \ // RUN: FileCheck -check-prefix HOST %s #include "Inputs/cuda.h" __host__ __device__ void f(); // HOST: define{{.*}} void @_Z7host_fnv() [[HOST_ATTR:#[0-9]+]] void host_fn() { f(); } // DEVICE: define{{.*}} void @_Z3foov() [[DEVICE_ATTR:#[0-9]+]] __device__ void foo() { // DEVICE: call void @_Z1fv f(); } // DEVICE: define{{.*}} void @_Z12foo_noexceptv() [[DEVICE_ATTR:#[0-9]+]] __device__ void foo_noexcept() noexcept { // DEVICE: call void @_Z1fv f(); } // This is nounwind only on the device side. // CHECK: define{{.*}} void @_Z3foov() [[DEVICE_ATTR:#[0-9]+]] __host__ __device__ void bar() { f(); } // DEVICE: define{{.*}} void @_Z3bazv() [[DEVICE_ATTR:#[0-9]+]] __global__ void baz() { f(); } // DEVICE: attributes [[DEVICE_ATTR]] = { // DEVICE-SAME: nounwind // HOST: attributes [[HOST_ATTR]] = { // HOST-NOT: nounwind // HOST-SAME: }