247 lines · cpp
1struct X { int x; };2void z(int);3typedef struct t TYPEDEF;4 5void foo() {6 int y = 17;7 // RUN: %clang_cc1 -fsyntax-only -fcxx-exceptions -code-completion-patterns -code-completion-at=%s:6:14 -std=gnu++98 %s -o - | FileCheck -check-prefix=CHECK-CC1 %s8 // CHECK-CC1: COMPLETION: bool9 // CHECK-CC1-NEXT: COMPLETION: char10 // CHECK-CC1-NEXT: COMPLETION: class11 // CHECK-CC1-NEXT: COMPLETION: const12 // CHECK-CC1-NEXT: COMPLETION: Pattern : const_cast<<#type#>>(<#expression#>)13 // CHECK-CC1: COMPLETION: Pattern : [#void#]delete <#expression#>14 // CHECK-CC1-NEXT: COMPLETION: Pattern : [#void#]delete [] <#expression#>15 // CHECK-CC1-NEXT: COMPLETION: Pattern : do {16 // CHECK-CC1-NEXT: <#statements#>17 // CHECK-CC1-NEXT: }18 // CHECK-CC1: COMPLETION: double19 // CHECK-CC1-NEXT: COMPLETION: Pattern : dynamic_cast<<#type#>>(<#expression#>)20 // CHECK-CC1-NEXT: COMPLETION: enum21 // CHECK-CC1-NEXT: COMPLETION: extern22 // CHECK-CC1-NEXT: COMPLETION: Pattern : [#bool#]false23 // CHECK-CC1-NEXT: COMPLETION: float24 // CHECK-CC1-NEXT: COMPLETION: foo : [#void#]foo()25 // CHECK-CC1-NEXT: COMPLETION: Pattern : for (<#init-statement#>; <#condition#>; <#inc-expression#>) {26 // CHECK-CC1-NEXT: <#statements#>{{$}}27 // CHECK-CC1-NEXT: }28 // CHECK-CC1: COMPLETION: Pattern : goto <#label#>;29 // CHECK-CC1-NEXT: COMPLETION: Pattern : if (<#condition#>) {30 // CHECK-CC1-NEXT: <#statements#>{{$}}31 // CHECK-CC1-NEXT: }32 // CHECK-CC1: COMPLETION: int33 // CHECK-CC1-NEXT: COMPLETION: long34 // CHECK-CC1-NEXT: COMPLETION: Pattern : new <#type#>(<#expressions#>)35 // CHECK-CC1-NEXT: COMPLETION: Pattern : new <#type#>[<#size#>](<#expressions#>)36 // CHECK-CC1-NEXT: COMPLETION: operator37 // CHECK-CC1-NEXT: COMPLETION: Pattern : reinterpret_cast<<#type#>>(<#expression#>)38 // CHECK-CC1-NEXT: COMPLETION: Pattern : return;39 // CHECK-CC1-NEXT: COMPLETION: short40 // CHECK-CC1-NEXT: COMPLETION: signed41 // CHECK-CC1-NEXT: COMPLETION: Pattern : [#size_t#]sizeof(<#expression-or-type#>)42 // CHECK-CC1-NEXT: COMPLETION: static43 // CHECK-CC1-NEXT: COMPLETION: Pattern : static_cast<<#type#>>(<#expression#>)44 // CHECK-CC1-NEXT: COMPLETION: struct45 // CHECK-CC1-NEXT: COMPLETION: Pattern : switch (<#condition#>) {46 // CHECK-CC1: COMPLETION: t : t47 // CHECK-CC1-NEXT: COMPLETION: Pattern : [#void#]throw <#expression#>48 // CHECK-CC1-NEXT: COMPLETION: Pattern : [#bool#]true49 // CHECK-CC1-NEXT: COMPLETION: Pattern : try {50 // CHECK-CC1-NEXT: <#statements#>51 // CHECK-CC1-NEXT: } catch (<#declaration#>) {52 // CHECK-CC1-NEXT: <#statements#>53 // CHECK-CC1-NEXT: }54 // CHECK-CC1: COMPLETION: TYPEDEF : TYPEDEF55 // CHECK-CC1-NEXT: COMPLETION: Pattern : typedef <#type#> <#name#>;56 // CHECK-CC1-NEXT: COMPLETION: Pattern : [#std::type_info#]typeid(<#expression-or-type#>)57 // CHECK-CC1-NEXT: COMPLETION: Pattern : typename <#name#>58 // CHECK-CC1-NEXT: COMPLETION: Pattern : typeof <#expression#>59 // CHECK-CC1-NEXT: COMPLETION: Pattern : typeof(<#type#>)60 // CHECK-CC1-NEXT: COMPLETION: union61 // CHECK-CC1-NEXT: COMPLETION: unsigned62 // CHECK-CC1-NOT: COMPLETION: Pattern : using <#name#> = <#type#>;63 // CHECK-CC1-NEXT: COMPLETION: Pattern : using namespace <#identifier#>;64 // CHECK-CC1-NEXT: COMPLETION: void65 // CHECK-CC1-NEXT: COMPLETION: volatile66 // CHECK-CC1-NEXT: COMPLETION: wchar_t67 // CHECK-CC1-NEXT: COMPLETION: Pattern : while (<#condition#>) {68 // CHECK-CC1-NEXT: <#statements#>69 // CHECK-CC1-NEXT: }70 // CHECK-CC1: COMPLETION: X : X71 // CHECK-CC1-NEXT: COMPLETION: y : [#int#]y72 // CHECK-CC1-NEXT: COMPLETION: z : [#void#]z(<#int#>)73 74 // RUN: %clang_cc1 -fsyntax-only -code-completion-patterns -code-completion-at=%s:4:1 -std=gnu++98 %s -o - | FileCheck -check-prefix=CHECK-CC2 %s75 // CHECK-CC2: COMPLETION: Pattern : asm(<#string-literal#>)76 // CHECK-CC2-NEXT: COMPLETION: bool77 // CHECK-CC2-NEXT: COMPLETION: char78 // CHECK-CC2-NEXT: COMPLETION: class79 // CHECK-CC2-NEXT: COMPLETION: const80 // CHECK-CC2-NEXT: COMPLETION: double81 // CHECK-CC2-NEXT: COMPLETION: enum82 // CHECK-CC2-NEXT: COMPLETION: extern83 // CHECK-CC2-NEXT: COMPLETION: float84 // CHECK-CC2-NEXT: COMPLETION: inline85 // CHECK-CC2-NEXT: COMPLETION: int86 // CHECK-CC2-NEXT: COMPLETION: long87 // CHECK-CC2-NEXT: COMPLETION: Pattern : namespace <#identifier#> {88 // CHECK-CC2-NEXT: <#declarations#>89 // CHECK-CC2-NEXT: }90 // CHECK-CC2: COMPLETION: Pattern : namespace <#name#> = <#namespace#>;91 // CHECK-CC2-NEXT: COMPLETION: operator92 // CHECK-CC2-NEXT: COMPLETION: short93 // CHECK-CC2-NEXT: COMPLETION: signed94 // CHECK-CC2-NEXT: COMPLETION: static95 // CHECK-CC2-NEXT: COMPLETION: struct96 // CHECK-CC2-NEXT: COMPLETION: t : t97 // CHECK-CC2-NEXT: COMPLETION: Pattern : template <#declaration#>98 // CHECK-CC2-NEXT: COMPLETION: Pattern : template<<#parameters#>>99 // CHECK-CC2-NEXT: COMPLETION: TYPEDEF : TYPEDEF100 // CHECK-CC2-NEXT: COMPLETION: Pattern : typedef <#type#> <#name#>;101 // CHECK-CC2-NEXT: COMPLETION: Pattern : typename <#name#>102 // CHECK-CC2-NEXT: COMPLETION: Pattern : typeof <#expression#>103 // CHECK-CC2-NEXT: COMPLETION: Pattern : typeof(<#type#>)104 // CHECK-CC2-NEXT: COMPLETION: union105 // CHECK-CC2-NEXT: COMPLETION: unsigned106 // CHECK-CC2-NEXT: COMPLETION: Pattern : using <#qualifier#>::<#name#>;107 // CHECK-CC2-NOT: COMPLETION: Pattern : using <#name#> = <#type#>;108 // CHECK-CC2-NEXT: COMPLETION: Pattern : using namespace <#identifier#>;109 // CHECK-CC2-NEXT: COMPLETION: void110 // CHECK-CC2-NEXT: COMPLETION: volatile111 // CHECK-CC2-NEXT: COMPLETION: wchar_t112 // CHECK-CC2-NEXT: COMPLETION: X : X113 114 // RUN: %clang_cc1 -fsyntax-only -code-completion-patterns -code-completion-at=%s:1:19 -std=gnu++98 %s -o - | FileCheck -check-prefix=CHECK-CC3 %s115 // CHECK-CC3: COMPLETION: bool116 // CHECK-CC3-NEXT: COMPLETION: char117 // CHECK-CC3-NEXT: COMPLETION: class118 // CHECK-CC3-NEXT: COMPLETION: const119 // CHECK-CC3-NEXT: COMPLETION: double120 // CHECK-CC3-NEXT: COMPLETION: enum121 // CHECK-CC3-NEXT: COMPLETION: explicit122 // CHECK-CC3-NEXT: COMPLETION: extern123 // CHECK-CC3-NEXT: COMPLETION: float124 // CHECK-CC3-NEXT: COMPLETION: friend125 // CHECK-CC3-NEXT: COMPLETION: inline126 // CHECK-CC3-NEXT: COMPLETION: int127 // CHECK-CC3-NEXT: COMPLETION: long128 // CHECK-CC3-NEXT: COMPLETION: mutable129 // CHECK-CC3-NEXT: COMPLETION: operator130 // CHECK-CC3-NEXT: COMPLETION: Pattern : private: 131 // CHECK-CC3-NEXT: COMPLETION: Pattern : protected: 132 // CHECK-CC3-NEXT: COMPLETION: Pattern : public: 133 // CHECK-CC3-NEXT: COMPLETION: short134 // CHECK-CC3-NEXT: COMPLETION: signed135 // CHECK-CC3-NEXT: COMPLETION: static136 // CHECK-CC3-NEXT: COMPLETION: struct137 // CHECK-CC3-NEXT: COMPLETION: Pattern : template<<#parameters#>>138 // CHECK-CC3-NEXT: COMPLETION: Pattern : typedef <#type#> <#name#>;139 // CHECK-CC3-NEXT: COMPLETION: Pattern : typename <#name#>140 // CHECK-CC3-NEXT: COMPLETION: Pattern : typeof <#expression#>141 // CHECK-CC3-NEXT: COMPLETION: Pattern : typeof(<#type#>)142 // CHECK-CC3-NEXT: COMPLETION: union143 // CHECK-CC3-NEXT: COMPLETION: unsigned144 // CHECK-CC3-NEXT: COMPLETION: Pattern : using <#qualifier#>::<#name#>;145 // CHECK-CC3-NOT: COMPLETION: Pattern : using <#name#> = <#type#>;146 // CHECK-CC3-NEXT: COMPLETION: virtual147 // CHECK-CC3-NEXT: COMPLETION: void148 // CHECK-CC3-NEXT: COMPLETION: volatile149 // CHECK-CC3-NEXT: COMPLETION: wchar_t150 // CHECK-CC3-NEXT: COMPLETION: X : X151 152 // RUN: %clang_cc1 -fsyntax-only -fcxx-exceptions -code-completion-patterns -code-completion-at=%s:6:11 -std=gnu++98 %s -o - | FileCheck -check-prefix=CHECK-CC4 %s153 // CHECK-CC4: COMPLETION: bool154 // CHECK-CC4-NEXT: COMPLETION: char155 // CHECK-CC4-NEXT: COMPLETION: class156 // CHECK-CC4-NEXT: COMPLETION: const157 // CHECK-CC4-NEXT: COMPLETION: Pattern : const_cast<<#type#>>(<#expression#>)158 // CHECK-CC4-NEXT: COMPLETION: Pattern : [#void#]delete <#expression#>159 // CHECK-CC4-NEXT: COMPLETION: Pattern : [#void#]delete [] <#expression#>160 // CHECK-CC4-NEXT: COMPLETION: double161 // CHECK-CC4-NEXT: COMPLETION: Pattern : dynamic_cast<<#type#>>(<#expression#>)162 // CHECK-CC4-NEXT: COMPLETION: enum163 // CHECK-CC4-NEXT: COMPLETION: Pattern : [#bool#]false164 // CHECK-CC4-NEXT: COMPLETION: float165 // CHECK-CC4-NEXT: COMPLETION: foo : [#void#]foo()166 // CHECK-CC4-NEXT: COMPLETION: int167 // CHECK-CC4-NEXT: COMPLETION: long168 // CHECK-CC4-NEXT: COMPLETION: Pattern : new <#type#>(<#expressions#>)169 // CHECK-CC4-NEXT: COMPLETION: Pattern : new <#type#>[<#size#>](<#expressions#>)170 // CHECK-CC4-NEXT: COMPLETION: operator171 // CHECK-CC4-NEXT: COMPLETION: Pattern : reinterpret_cast<<#type#>>(<#expression#>)172 // CHECK-CC4-NEXT: COMPLETION: short173 // CHECK-CC4-NEXT: COMPLETION: signed174 // CHECK-CC4-NEXT: COMPLETION: Pattern : [#size_t#]sizeof(<#expression-or-type#>)175 // CHECK-CC4-NEXT: COMPLETION: Pattern : static_cast<<#type#>>(<#expression#>)176 // CHECK-CC4-NEXT: COMPLETION: struct177 // CHECK-CC4-NEXT: COMPLETION: t : t178 // CHECK-CC4-NEXT: COMPLETION: Pattern : [#void#]throw <#expression#>179 // CHECK-CC4-NEXT: COMPLETION: Pattern : [#bool#]true180 // CHECK-CC4-NEXT: COMPLETION: TYPEDEF : TYPEDEF181 // CHECK-CC4-NEXT: COMPLETION: Pattern : [#std::type_info#]typeid(<#expression-or-type#>)182 // CHECK-CC4-NEXT: COMPLETION: Pattern : typename <#name#>183 // CHECK-CC4-NEXT: COMPLETION: Pattern : typeof <#expression#>184 // CHECK-CC4-NEXT: COMPLETION: Pattern : typeof(<#type#>)185 // CHECK-CC4-NEXT: COMPLETION: union186 // CHECK-CC4-NEXT: COMPLETION: unsigned187 // CHECK-CC4-NEXT: COMPLETION: void188 // CHECK-CC4-NEXT: COMPLETION: volatile189 // CHECK-CC4-NEXT: COMPLETION: wchar_t190 // CHECK-CC4-NEXT: COMPLETION: X : X191 // CHECK-CC4-NEXT: COMPLETION: z : [#void#]z(<#int#>)192 193 // RUN: %clang_cc1 -fsyntax-only -fno-rtti -code-completion-patterns -code-completion-at=%s:6:14 -std=gnu++98 %s -o - | FileCheck -check-prefix=CHECK-NO-RTTI %s194 // CHECK-NO-RTTI: COMPLETION: bool195 // CHECK-NO-RTTI-NEXT: COMPLETION: char196 // CHECK-NO-RTTI-NEXT: COMPLETION: class197 // CHECK-NO-RTTI-NEXT: COMPLETION: const198 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : const_cast<<#type#>>(<#expression#>)199 // CHECK-NO-RTTI: COMPLETION: Pattern : [#void#]delete <#expression#>200 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : [#void#]delete [] <#expression#>201 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : do {202 // CHECK-NO-RTTI: COMPLETION: double203 // CHECK-NO-RTTI-NOT: dynamic_cast204 // CHECK-NO-RTTI: COMPLETION: enum205 // CHECK-NO-RTTI-NEXT: COMPLETION: extern206 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : [#bool#]false207 // CHECK-NO-RTTI-NEXT: COMPLETION: float208 // CHECK-NO-RTTI-NEXT: COMPLETION: foo : [#void#]foo()209 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : for (<#init-statement#>; <#condition#>; <#inc-expression#>) {210 // CHECK-NO-RTTI: COMPLETION: Pattern : goto <#label#>;211 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : if (<#condition#>) {212 // CHECK-NO-RTTI: COMPLETION: int213 // CHECK-NO-RTTI-NEXT: COMPLETION: long214 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : new <#type#>(<#expressions#>)215 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : new <#type#>[<#size#>](<#expressions#>)216 // CHECK-NO-RTTI-NEXT: COMPLETION: operator217 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : reinterpret_cast<<#type#>>(<#expression#>)218 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : return;219 // CHECK-NO-RTTI-NEXT: COMPLETION: short220 // CHECK-NO-RTTI-NEXT: COMPLETION: signed221 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : [#size_t#]sizeof(<#expression-or-type#>)222 // CHECK-NO-RTTI-NEXT: COMPLETION: static223 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : static_cast<<#type#>>(<#expression#>)224 // CHECK-NO-RTTI-NEXT: COMPLETION: struct225 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : switch (<#condition#>) {226 // CHECK-NO-RTTI: COMPLETION: t : t227 // CHECK-NO-RTTI-NOT: throw228 // CHECK-NO-RTTI: COMPLETION: Pattern : [#bool#]true229 // CHECK-NO-RTTI-NOT: try230 // CHECK-NO-RTTI: COMPLETION: TYPEDEF : TYPEDEF231 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : typedef <#type#> <#name#>;232 // CHECK-NO-RTTI-NOT: typeid233 // CHECK-NO-RTTI: COMPLETION: Pattern : typename <#name#>234 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : typeof <#expression#>235 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : typeof(<#type#>)236 // CHECK-NO-RTTI-NEXT: COMPLETION: union237 // CHECK-NO-RTTI-NEXT: COMPLETION: unsigned238 // CHECK-NO-RTTI-NOT: COMPLETION: Pattern : using <#name#> = <#type#>;239 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : using namespace <#identifier#>;240 // CHECK-NO-RTTI-NEXT: COMPLETION: void241 // CHECK-NO-RTTI-NEXT: COMPLETION: volatile242 // CHECK-NO-RTTI-NEXT: COMPLETION: wchar_t243 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : while (<#condition#>) {244 // CHECK-NO-RTTI: COMPLETION: X : X245 // CHECK-NO-RTTI-NEXT: COMPLETION: y : [#int#]y246 // CHECK-NO-RTTI-NEXT: COMPLETION: z : [#void#]z(<#int#>)247