// RUN: %clang_cc1 -std=c++11 -fsyntax-only -fsycl-is-device -verify %s
// Only function templates
int gv2 = 0; // expected-warning {{'sycl_kernel' attribute only applies to function templates}}
int gv3 = 0; // expected-warning {{'sycl_kernel' attribute only applies to function templates}}
void ; // expected-warning {{'sycl_kernel' attribute only applies to function templates}}
void ; // expected-warning {{'sycl_kernel' attribute only applies to function templates}}
// Attribute takes no arguments
void ; // expected-error {{'sycl_kernel' attribute takes no arguments}}
void ;// expected-error {{'sycl_kernel' attribute takes no arguments}}
// At least two template parameters
void ; // expected-warning {{'sycl_kernel' attribute only applies to a function template with at least two template parameters}}
void ; // expected-warning {{'sycl_kernel' attribute only applies to a function template with at least two template parameters}}
// First two template parameters cannot be non-type template parameters
void ; // expected-warning {{template parameter of a function template with the 'sycl_kernel' attribute cannot be a non-type template parameter}}
void ; // expected-warning {{template parameter of a function template with the 'sycl_kernel' attribute cannot be a non-type template parameter}}
// Must return void
int ; // expected-warning {{function template with 'sycl_kernel' attribute must have a 'void' return type}}
int ; // expected-warning {{function template with 'sycl_kernel' attribute must have a 'void' return type}}
// Must take at least one argument
void ; // expected-warning {{function template with 'sycl_kernel' attribute must have a single parameter}}
void ; // expected-warning {{function template with 'sycl_kernel' attribute must have a single parameter}}
// No diagnostics
void ;
void ;