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