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