|  | //RUN: %clang_cc1 %s -verify -fsyntax-only -triple spir | 
|  | //RUN: %clang_cc1 %s -verify -fsyntax-only -DFPTREXT -triple spir | 
|  |  | 
|  | #ifdef FPTREXT | 
|  | #pragma OPENCL EXTENSION __cl_clang_function_pointers : enable | 
|  | #endif // FPTREXT | 
|  |  | 
|  | // References to functions are not allowed. | 
|  | struct myclass { | 
|  | //FIXME: Here we provide incorrect diagnostic. | 
|  | void (&mem)(); //expected-error{{reference to function type cannot have '__generic' qualifier}} | 
|  | }; | 
|  |  | 
|  | void (&glob)(); | 
|  | #ifndef FPTREXT | 
|  | //expected-error@-2{{references to functions are not allowed}} | 
|  | #else | 
|  | //expected-error@-4{{declaration of reference variable 'glob' requires an initializer}} | 
|  | #endif // FPTREXT | 
|  |  | 
|  | using ref2fct_t = void (&)(); | 
|  | #ifndef FPTREXT | 
|  | //expected-error@-2{{references to functions are not allowed}} | 
|  | #endif // FPTREXT | 
|  | typedef void (&ref2fct_t)(); | 
|  | #ifndef FPTREXT | 
|  | //expected-error@-2{{references to functions are not allowed}} | 
|  | #endif // FPTREXT | 
|  |  | 
|  | void test(void (&par)()) { | 
|  | #ifndef FPTREXT | 
|  | //expected-error@-2{{references to functions are not allowed}} | 
|  | #endif // FPTREXT | 
|  | void (&loc)(); | 
|  | #ifndef FPTREXT | 
|  | //expected-error@-2{{references to functions are not allowed}} | 
|  | #else | 
|  | //expected-error@-4{{declaration of reference variable 'loc' requires an initializer}} | 
|  | #endif // FPTREXT | 
|  |  | 
|  | void (*&ref2fptr)(); | 
|  | #ifndef FPTREXT | 
|  | //expected-error@-2{{pointers to functions are not allowed}} | 
|  | #endif // FPTREXT | 
|  | //expected-error@-4{{declaration of reference variable 'ref2fptr' requires an initializer}} | 
|  | } |