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