xref: /llvm-project/clang/test/ParserSYCL/unique_stable_name.cpp (revision eba69b59d1a30dead07da2c279c8ecfd2b62ba9f)
1*eba69b59SErich Keane // RUN: %clang_cc1 -fsycl-is-device -fsyntax-only -verify -Wno-unused %s
2*eba69b59SErich Keane 
3*eba69b59SErich Keane namespace NS {
4*eba69b59SErich Keane using good = double;
5*eba69b59SErich Keane }
6*eba69b59SErich Keane 
f(int var)7*eba69b59SErich Keane void f(int var) {
8*eba69b59SErich Keane   // expected-error@+1{{expected '(' after '__builtin_sycl_unique_stable_name'}}
9*eba69b59SErich Keane   __builtin_sycl_unique_stable_name int; // Correct usage is __builtin_sycl_unique_stable_name(int);
10*eba69b59SErich Keane 
11*eba69b59SErich Keane   // expected-error@+1{{expected '(' after '__builtin_sycl_unique_stable_name'}}
12*eba69b59SErich Keane   __builtin_sycl_unique_stable_name{int}; // Correct usage is __builtin_sycl_unique_stable_name(int);
13*eba69b59SErich Keane 
14*eba69b59SErich Keane   // expected-error@+2{{expected ')'}}
15*eba69b59SErich Keane   // expected-note@+1{{to match this '('}}
16*eba69b59SErich Keane   __builtin_sycl_unique_stable_name(int; // Missing paren before semicolon
17*eba69b59SErich Keane 
18*eba69b59SErich Keane   // expected-error@+2{{expected ')'}}
19*eba69b59SErich Keane   // expected-note@+1{{to match this '('}}
20*eba69b59SErich Keane   __builtin_sycl_unique_stable_name(int, float); // Missing paren before comma
21*eba69b59SErich Keane 
22*eba69b59SErich Keane   // expected-error@+1{{unknown type name 'var'}}
23*eba69b59SErich Keane   __builtin_sycl_unique_stable_name(var);
24*eba69b59SErich Keane   __builtin_sycl_unique_stable_name(NS::good);
25*eba69b59SErich Keane 
26*eba69b59SErich Keane   // expected-error@+1{{expected a type}}
27*eba69b59SErich Keane   __builtin_sycl_unique_stable_name(for (int i = 0; i < 10; ++i) {})
28*eba69b59SErich Keane   __builtin_sycl_unique_stable_name({
29*eba69b59SErich Keane     (for (int i = 0; i < 10; ++i){})})
30*eba69b59SErich Keane }
31*eba69b59SErich Keane 
32*eba69b59SErich Keane template <typename T>
33*eba69b59SErich Keane void f2() {
34*eba69b59SErich Keane   __builtin_sycl_unique_stable_name(typename T::good_type);
35*eba69b59SErich Keane }
36*eba69b59SErich Keane 
37*eba69b59SErich Keane struct S {
38*eba69b59SErich Keane   class good_type {};
39*eba69b59SErich Keane };
40*eba69b59SErich Keane 
41*eba69b59SErich Keane void use() {
42*eba69b59SErich Keane   f2<S>();
43*eba69b59SErich Keane }
44