1*4eaf5846SElizabeth Andrews // RUN: %clang_cc1 -fsycl-is-device -emit-llvm -triple spir64 -verify -emit-llvm %s -o - | FileCheck %s 2*4eaf5846SElizabeth Andrews 3*4eaf5846SElizabeth Andrews // expected-no-diagnostics 4*4eaf5846SElizabeth Andrews 5*4eaf5846SElizabeth Andrews template <typename Name, typename Func> 6*4eaf5846SElizabeth Andrews __attribute__((sycl_kernel)) void kernel_single_task(const Func &kernelFunc) { 7*4eaf5846SElizabeth Andrews kernelFunc(); 8*4eaf5846SElizabeth Andrews } 9*4eaf5846SElizabeth Andrews 10*4eaf5846SElizabeth Andrews // CHECK: define dso_local spir_func{{.*}}invoke_function{{.*}}(i32 ()* %fptr, i32 addrspace(4)* %ptr) 11*4eaf5846SElizabeth Andrews void invoke_function(int (*fptr)(), int *ptr) {} 12*4eaf5846SElizabeth Andrews 13*4eaf5846SElizabeth Andrews int f() { return 0; } 14*4eaf5846SElizabeth Andrews 15*4eaf5846SElizabeth Andrews int main() { 16*4eaf5846SElizabeth Andrews kernel_single_task<class fake_kernel>([=]() { 17*4eaf5846SElizabeth Andrews int (*p)() = f; 18*4eaf5846SElizabeth Andrews int (&r)() = *p; 19*4eaf5846SElizabeth Andrews int a = 10; 20*4eaf5846SElizabeth Andrews invoke_function(p, &a); 21*4eaf5846SElizabeth Andrews invoke_function(r, &a); 22*4eaf5846SElizabeth Andrews invoke_function(f, &a); 23*4eaf5846SElizabeth Andrews }); 24*4eaf5846SElizabeth Andrews return 0; 25*4eaf5846SElizabeth Andrews } 26