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