|  | // RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify \ | 
|  | // RUN:   -verify-ignore-unexpected=note %s | 
|  | // RUN: %clang_cc1 -std=c++11 -fcuda-is-device -fsyntax-only -verify \ | 
|  | // RUN:   -verify-ignore-unexpected=note -DDEVICE %s | 
|  |  | 
|  | // Check that we can reference (get a function pointer to) a __global__ | 
|  | // function from the host side, but not the device side.  (We don't yet support | 
|  | // device-side kernel launches.) | 
|  |  | 
|  | #include "Inputs/cuda.h" | 
|  |  | 
|  | struct Dummy {}; | 
|  |  | 
|  | __global__ void kernel() {} | 
|  |  | 
|  | typedef void (*fn_ptr_t)(); | 
|  |  | 
|  | __host__ __device__ fn_ptr_t get_ptr_hd() { | 
|  | return kernel; | 
|  | #ifdef DEVICE | 
|  | // expected-error@-2 {{reference to __global__ function}} | 
|  | #endif | 
|  | } | 
|  | __host__ fn_ptr_t get_ptr_h() { | 
|  | return kernel; | 
|  | } | 
|  | __device__ fn_ptr_t get_ptr_d() { | 
|  | return kernel;  // expected-error {{reference to __global__ function}} | 
|  | } |