1 int a [[gnu::used]];
2 // RUN: %clang_cc1 -code-completion-at=%s:1:9 %s | FileCheck --check-prefix=STD %s
3 // STD:     COMPLETION: __carries_dependency__
4 // STD-NOT: COMPLETION: __convergent__
5 // STD:     COMPLETION: __gnu__::__used__
6 // STD-NOT: COMPLETION: __gnu__::used
7 // STD-NOT: COMPLETION: __used__
8 // STD:     COMPLETION: _Clang::__convergent__
9 // STD:     COMPLETION: carries_dependency
10 // STD:     COMPLETION: clang::convergent
11 // STD-NOT: COMPLETION: convergent
12 // STD-NOT:     COMPLETION: gnu::__used__
13 // STD:     COMPLETION: gnu::used
14 // STD-NOT: COMPLETION: used
15 // RUN: %clang_cc1 -code-completion-at=%s:1:14 %s | FileCheck --check-prefix=STD-NS %s
16 // STD-NS-NOT: COMPLETION: __used__
17 // STD-NS-NOT: COMPLETION: carries_dependency
18 // STD-NS-NOT: COMPLETION: clang::convergent
19 // STD-NS-NOT: COMPLETION: convergent
20 // STD-NS-NOT: COMPLETION: gnu::used
21 // STD-NS:     COMPLETION: used
22 int b [[__gnu__::used]];
23 // RUN: %clang_cc1 -code-completion-at=%s:22:18 %s | FileCheck --check-prefix=STD-NSU %s
24 // STD-NSU:     COMPLETION: __used__
25 // STD-NSU-NOT: COMPLETION: used
26 
27 int c [[using gnu: used]];
28 // RUN: %clang_cc1 -code-completion-at=%s:27:15 %s | FileCheck --check-prefix=STD-USING %s
29 // STD-USING:     COMPLETION: __gnu__
30 // STD-USING:     COMPLETION: _Clang
31 // STD-USING-NOT: COMPLETION: carries_dependency
32 // STD-USING:     COMPLETION: clang
33 // STD-USING-NOT: COMPLETION: clang::
34 // STD-USING-NOT: COMPLETION: gnu::
35 // STD-USING:     COMPLETION: gnu
36 // RUN: %clang_cc1 -code-completion-at=%s:27:20 %s | FileCheck --check-prefix=STD-NS %s
37 
38 int d __attribute__((used));
39 // RUN: %clang_cc1 -code-completion-at=%s:38:22 %s | FileCheck --check-prefix=GNU %s
40 // GNU:     COMPLETION: __carries_dependency__
41 // GNU:     COMPLETION: __convergent__
42 // GNU-NOT: COMPLETION: __gnu__::__used__
43 // GNU:     COMPLETION: __used__
44 // GNU-NOT: COMPLETION: _Clang::__convergent__
45 // GNU:     COMPLETION: carries_dependency
46 // GNU-NOT: COMPLETION: clang::convergent
47 // GNU:     COMPLETION: convergent
48 // GNU-NOT: COMPLETION: gnu::used
49 // GNU:     COMPLETION: used
50 
51 #pragma clang attribute push (__attribute__((internal_linkage)), apply_to=variable)
52 int e;
53 #pragma clang attribute pop
54 // RUN: %clang_cc1 -code-completion-at=%s:51:46 %s | FileCheck --check-prefix=PRAGMA %s
55 // PRAGMA: internal_linkage
56 
57 #ifdef MS_EXT
58 int __declspec(thread) f;
59 // RUN: %clang_cc1 -fms-extensions -DMS_EXT -code-completion-at=%s:58:16 %s | FileCheck --check-prefix=DS %s
60 // DS-NOT: COMPLETION: __convergent__
61 // DS-NOT: COMPLETION: __used__
62 // DS-NOT: COMPLETION: clang::convergent
63 // DS-NOT: COMPLETION: convergent
64 // DS:     COMPLETION: thread
65 // DS-NOT: COMPLETION: used
66 // DS:     COMPLETION: uuid
67 
68 [uuid("123e4567-e89b-12d3-a456-426614174000")] struct g;
69 // RUN: %clang_cc1 -fms-extensions -DMS_EXT -code-completion-at=%s:68:2 %s | FileCheck --check-prefix=MS %s
70 // MS-NOT: COMPLETION: __uuid__
71 // MS-NOT: COMPLETION: clang::convergent
72 // MS-NOT: COMPLETION: convergent
73 // MS-NOT: COMPLETION: thread
74 // MS-NOT: COMPLETION: used
75 // MS:     COMPLETION: uuid
76 #endif // MS_EXT
77 
78 void foo() {
79   [[omp::sequence(directive(parallel), directive(critical))]]
80   {}
81 }
82 // FIXME: support for omp attributes would be nice.
83 // RUN: %clang_cc1 -fopenmp -code-completion-at=%s:79:5 %s | FileCheck --check-prefix=OMP-NS --allow-empty %s
84 // OMP-NS-NOT: omp
85 // RUN: %clang_cc1 -fopenmp -code-completion-at=%s:79:10 %s | FileCheck --check-prefix=OMP-ATTR --allow-empty %s
86 // OMP-ATTR-NOT: sequence
87 // RUN: %clang_cc1 -fopenmp -code-completion-at=%s:79:19 %s | FileCheck --check-prefix=OMP-NESTED --allow-empty %s
88 // OMP-NESTED-NOT: directive
89