1 struct X { int x; }; 2 void z(int); 3 typedef struct t TYPEDEF; 4 5 void foo() { 6 int y = 17; 7 // RUN: %clang_cc1 -fsyntax-only -fcxx-exceptions -code-completion-patterns -code-completion-at=%s:6:14 -std=gnu++11 %s -o - | FileCheck -check-prefix=CHECK-CC1 %s 8 // CHECK-CC1: COMPLETION: bool 9 // CHECK-CC1-NEXT: COMPLETION: char 10 // CHECK-CC1-NEXT: COMPLETION: char16 11 // CHECK-CC1-NEXT: COMPLETION: char32 12 // CHECK-CC1-NEXT: COMPLETION: class 13 // CHECK-CC1-NEXT: COMPLETION: const 14 // CHECK-CC1-NEXT: COMPLETION: Pattern : const_cast<<#type#>>(<#expression#>) 15 // CHECK-CC1: COMPLETION: Pattern : [#void#]delete <#expression#> 16 // CHECK-CC1-NEXT: COMPLETION: Pattern : [#void#]delete [] <#expression#> 17 // CHECK-CC1-NEXT: COMPLETION: Pattern : do{<#statements#> 18 // CHECK-CC1: COMPLETION: double 19 // CHECK-CC1-NEXT: COMPLETION: Pattern : dynamic_cast<<#type#>>(<#expression#>) 20 // CHECK-CC1-NEXT: COMPLETION: enum 21 // CHECK-CC1-NEXT: COMPLETION: extern 22 // CHECK-CC1-NEXT: COMPLETION: Pattern : [#bool#]false 23 // CHECK-CC1-NEXT: COMPLETION: float 24 // CHECK-CC1-NEXT: COMPLETION: foo : [#void#]foo() 25 // CHECK-CC1-NEXT: COMPLETION: Pattern : for(<#init-statement#>;<#condition#>;<#inc-expression#>){ 26 // CHECK-CC1: COMPLETION: Pattern : goto <#label#> 27 // CHECK-CC1-NEXT: COMPLETION: Pattern : if(<#condition#>){<#statements#> 28 // CHECK-CC1: COMPLETION: int 29 // CHECK-CC1-NEXT: COMPLETION: long 30 // CHECK-CC1-NEXT: COMPLETION: Pattern : new <#type#>(<#expressions#>) 31 // CHECK-CC1-NEXT: COMPLETION: Pattern : new <#type#>[<#size#>](<#expressions#>) 32 // CHECK-CC1-NEXT: COMPLETION: Pattern : [#bool#]noexcept(<#expression#>) 33 // CHECK-CC1-NEXT: COMPLETION: Pattern : [#std::nullptr_t#]nullptr 34 // CHECK-CC1-NEXT: COMPLETION: operator 35 // CHECK-CC1-NEXT: COMPLETION: Pattern : reinterpret_cast<<#type#>>(<#expression#>) 36 // CHECK-CC1-NEXT: COMPLETION: Pattern : return 37 // CHECK-CC1-NEXT: COMPLETION: short 38 // CHECK-CC1-NEXT: COMPLETION: signed 39 // CHECK-CC1-NEXT: COMPLETION: Pattern : [#size_t#]sizeof(<#expression-or-type#>) 40 // CHECK-CC1-NEXT: COMPLETION: Pattern : [#size_t#]sizeof...(<#parameter-pack#>) 41 // CHECK-CC1-NEXT: COMPLETION: static 42 // CHECK-CC1-NEXT: COMPLETION: Pattern : static_assert(<#expression#>, <#message#>) 43 // CHECK-CC1-NEXT: COMPLETION: Pattern : static_cast<<#type#>>(<#expression#>) 44 // CHECK-CC1-NEXT: COMPLETION: struct 45 // CHECK-CC1-NEXT: COMPLETION: Pattern : switch(<#condition#>){ 46 // CHECK-CC1: COMPLETION: t : t 47 // CHECK-CC1-NEXT: COMPLETION: thread_local 48 // CHECK-CC1-NEXT: COMPLETION: Pattern : [#void#]throw <#expression#> 49 // CHECK-CC1-NEXT: COMPLETION: Pattern : [#bool#]true 50 // CHECK-CC1-NEXT: COMPLETION: Pattern : try{<#statements#> 51 // CHECK-CC1: COMPLETION: TYPEDEF : TYPEDEF 52 // CHECK-CC1-NEXT: COMPLETION: Pattern : typedef <#type#> <#name#> 53 // CHECK-CC1-NEXT: COMPLETION: Pattern : [#std::type_info#]typeid(<#expression-or-type#>) 54 // CHECK-CC1-NEXT: COMPLETION: Pattern : typename <#qualifier#>::<#name#> 55 // CHECK-CC1-NEXT: COMPLETION: Pattern : typeof <#expression#> 56 // CHECK-CC1-NEXT: COMPLETION: Pattern : typeof(<#type#>) 57 // CHECK-CC1-NEXT: COMPLETION: union 58 // CHECK-CC1-NEXT: COMPLETION: unsigned 59 // CHECK-CC1-NEXT: COMPLETION: Pattern : using namespace <#identifier#> 60 // CHECK-CC1-NEXT: COMPLETION: void 61 // CHECK-CC1-NEXT: COMPLETION: volatile 62 // CHECK-CC1-NEXT: COMPLETION: wchar_t 63 // CHECK-CC1-NEXT: COMPLETION: Pattern : while(<#condition#>){<#statements#> 64 // CHECK-CC1: COMPLETION: X : X 65 // CHECK-CC1-NEXT: COMPLETION: y : [#int#]y 66 // CHECK-CC1-NEXT: COMPLETION: z : [#void#]z(<#int#>) 67 68 // RUN: %clang_cc1 -fsyntax-only -code-completion-patterns -code-completion-at=%s:4:1 -std=gnu++11 %s -o - | FileCheck -check-prefix=CHECK-CC2 %s 69 // CHECK-CC2: COMPLETION: Pattern : asm(<#string-literal#>) 70 // CHECK-CC2: COMPLETION: auto 71 // CHECK-CC2-NEXT: COMPLETION: bool 72 // CHECK-CC2-NEXT: COMPLETION: char 73 // CHECK-CC2-NEXT: COMPLETION: char16 74 // CHECK-CC2-NEXT: COMPLETION: char32 75 // CHECK-CC2-NEXT: COMPLETION: class 76 // CHECK-CC2-NEXT: COMPLETION: const 77 // CHECK-CC2-NEXT: COMPLETION: constexpr 78 // CHECK-CC2-NEXT: COMPLETION: Pattern : decltype(<#expression#>) 79 // CHECK-CC2-NEXT: COMPLETION: double 80 // CHECK-CC2-NEXT: COMPLETION: enum 81 // CHECK-CC2-NEXT: COMPLETION: extern 82 // CHECK-CC2-NEXT: COMPLETION: float 83 // CHECK-CC2-NEXT: COMPLETION: inline 84 // CHECK-CC2-NEXT: COMPLETION: int 85 // CHECK-CC2-NEXT: COMPLETION: long 86 // CHECK-CC2-NEXT: COMPLETION: Pattern : namespace <#identifier#>{<#declarations#> 87 // CHECK-CC2: COMPLETION: Pattern : namespace <#name#> = <#namespace#> 88 // CHECK-CC2-NEXT: COMPLETION: operator 89 // CHECK-CC2-NEXT: COMPLETION: short 90 // CHECK-CC2-NEXT: COMPLETION: signed 91 // CHECK-CC2-NEXT: COMPLETION: static 92 // CHECK-CC2-NEXT: COMPLETION: Pattern : static_assert(<#expression#>, <#message#>) 93 // CHECK-CC2-NEXT: COMPLETION: struct 94 // CHECK-CC2-NEXT: COMPLETION: t : t 95 // CHECK-CC2-NEXT: COMPLETION: Pattern : template <#declaration#> 96 // CHECK-CC2-NEXT: COMPLETION: Pattern : template<<#parameters#>> 97 // CHECK-CC2-NEXT: COMPLETION: thread_local 98 // CHECK-CC2-NEXT: COMPLETION: TYPEDEF : TYPEDEF 99 // CHECK-CC2-NEXT: COMPLETION: Pattern : typedef <#type#> <#name#> 100 // CHECK-CC2-NEXT: COMPLETION: Pattern : typename <#qualifier#>::<#name#> 101 // CHECK-CC2-NEXT: COMPLETION: Pattern : typeof <#expression#> 102 // CHECK-CC2-NEXT: COMPLETION: Pattern : typeof(<#type#>) 103 // CHECK-CC2-NEXT: COMPLETION: union 104 // CHECK-CC2-NEXT: COMPLETION: unsigned 105 // CHECK-CC2-NEXT: COMPLETION: Pattern : using namespace <#identifier#> 106 // CHECK-CC2-NEXT: COMPLETION: Pattern : using <#qualifier#>::<#name#> 107 // CHECK-CC2-NEXT: COMPLETION: void 108 // CHECK-CC2-NEXT: COMPLETION: volatile 109 // CHECK-CC2-NEXT: COMPLETION: wchar_t 110 // CHECK-CC2-NEXT: COMPLETION: X : X 111 112 // RUN: %clang_cc1 -fsyntax-only -code-completion-patterns -code-completion-at=%s:1:19 -std=gnu++11 %s -o - | FileCheck -check-prefix=CHECK-CC3 %s 113 // CHECK-CC3: COMPLETION: bool 114 // CHECK-CC3-NEXT: COMPLETION: char 115 // CHECK-CC3-NEXT: COMPLETION: char16_t 116 // CHECK-CC3-NEXT: COMPLETION: char32_t 117 // CHECK-CC3-NEXT: COMPLETION: class 118 // CHECK-CC3-NEXT: COMPLETION: const 119 // CHECK-CC3-NEXT: COMPLETION: constexpr 120 // CHECK-CC3-NEXT: COMPLETION: Pattern : decltype(<#expression#>) 121 // CHECK-CC3-NEXT: COMPLETION: double 122 // CHECK-CC3-NEXT: COMPLETION: enum 123 // CHECK-CC3-NEXT: COMPLETION: explicit 124 // CHECK-CC3-NEXT: COMPLETION: extern 125 // CHECK-CC3-NEXT: COMPLETION: float 126 // CHECK-CC3-NEXT: COMPLETION: friend 127 // CHECK-CC3-NEXT: COMPLETION: inline 128 // CHECK-CC3-NEXT: COMPLETION: int 129 // CHECK-CC3-NEXT: COMPLETION: long 130 // CHECK-CC3-NEXT: COMPLETION: mutable 131 // CHECK-CC3-NEXT: COMPLETION: operator 132 // CHECK-CC3-NEXT: COMPLETION: Pattern : private: 133 // CHECK-CC3-NEXT: COMPLETION: Pattern : protected: 134 // CHECK-CC3-NEXT: COMPLETION: Pattern : public: 135 // CHECK-CC3-NEXT: COMPLETION: short 136 // CHECK-CC3-NEXT: COMPLETION: signed 137 // CHECK-CC3-NEXT: COMPLETION: static 138 // CHECK-CC3-NEXT: COMPLETION: Pattern : static_assert(<#expression#>, <#message#>) 139 // CHECK-CC3-NEXT: COMPLETION: struct 140 // CHECK-CC3-NEXT: COMPLETION: Pattern : template<<#parameters#>> 141 // CHECK-CC3-NEXT: COMPLETION: thread_local 142 // CHECK-CC3-NEXT: COMPLETION: Pattern : typedef <#type#> <#name#> 143 // CHECK-CC3-NEXT: COMPLETION: Pattern : typename <#qualifier#>::<#name#> 144 // CHECK-CC3-NEXT: COMPLETION: Pattern : typeof <#expression#> 145 // CHECK-CC3-NEXT: COMPLETION: Pattern : typeof(<#type#>) 146 // CHECK-CC3-NEXT: COMPLETION: union 147 // CHECK-CC3-NEXT: COMPLETION: unsigned 148 // CHECK-CC3-NEXT: COMPLETION: Pattern : using <#qualifier#>::<#name#> 149 // CHECK-CC3-NEXT: COMPLETION: virtual 150 // CHECK-CC3-NEXT: COMPLETION: void 151 // CHECK-CC3-NEXT: COMPLETION: volatile 152 // CHECK-CC3-NEXT: COMPLETION: wchar_t 153 // CHECK-CC3-NEXT: COMPLETION: X : X 154 155 // RUN: %clang_cc1 -fsyntax-only -fcxx-exceptions -code-completion-patterns -code-completion-at=%s:6:11 -std=gnu++11 %s -o - | FileCheck -check-prefix=CHECK-CC4 %s 156 // CHECK-CC4: COMPLETION: bool 157 // CHECK-CC4-NEXT: COMPLETION: char 158 // CHECK-CC4-NEXT: COMPLETION: char16_t 159 // CHECK-CC4-NEXT: COMPLETION: char32_t 160 // CHECK-CC4-NEXT: COMPLETION: class 161 // CHECK-CC4-NEXT: COMPLETION: const 162 // CHECK-CC4-NEXT: COMPLETION: Pattern : const_cast<<#type#>>(<#expression#>) 163 // CHECK-CC4-NEXT: COMPLETION: Pattern : decltype(<#expression#>) 164 // CHECK-CC4-NEXT: COMPLETION: Pattern : [#void#]delete <#expression#> 165 // CHECK-CC4-NEXT: COMPLETION: Pattern : [#void#]delete [] <#expression#> 166 // CHECK-CC4-NEXT: COMPLETION: double 167 // CHECK-CC4-NEXT: COMPLETION: Pattern : dynamic_cast<<#type#>>(<#expression#>) 168 // CHECK-CC4-NEXT: COMPLETION: enum 169 // CHECK-CC4-NEXT: COMPLETION: Pattern : [#bool#]false 170 // CHECK-CC4-NEXT: COMPLETION: float 171 // CHECK-CC4-NEXT: COMPLETION: foo : [#void#]foo() 172 // CHECK-CC4-NEXT: COMPLETION: int 173 // CHECK-CC4-NEXT: COMPLETION: long 174 // CHECK-CC4-NEXT: COMPLETION: Pattern : new <#type#>(<#expressions#>) 175 // CHECK-CC4-NEXT: COMPLETION: Pattern : new <#type#>[<#size#>](<#expressions#>) 176 // CHECK-CC4-NEXT: COMPLETION: Pattern : [#bool#]noexcept(<#expression#>) 177 // CHECK-CC4-NEXT: COMPLETION: Pattern : [#std::nullptr_t#]nullptr 178 // CHECK-CC4-NEXT: COMPLETION: operator 179 // CHECK-CC4-NEXT: COMPLETION: Pattern : reinterpret_cast<<#type#>>(<#expression#>) 180 // CHECK-CC4-NEXT: COMPLETION: short 181 // CHECK-CC4-NEXT: COMPLETION: signed 182 // CHECK-CC4-NEXT: COMPLETION: Pattern : [#size_t#]sizeof(<#expression-or-type#>) 183 // CHECK-CC4-NEXT: COMPLETION: Pattern : [#size_t#]sizeof...(<#parameter-pack#>) 184 // CHECK-CC4-NEXT: COMPLETION: Pattern : static_cast<<#type#>>(<#expression#>) 185 // CHECK-CC4-NEXT: COMPLETION: struct 186 // CHECK-CC4-NEXT: COMPLETION: t : t 187 // CHECK-CC4-NEXT: COMPLETION: Pattern : [#void#]throw <#expression#> 188 // CHECK-CC4-NEXT: COMPLETION: Pattern : [#bool#]true 189 // CHECK-CC4-NEXT: COMPLETION: TYPEDEF : TYPEDEF 190 // CHECK-CC4-NEXT: COMPLETION: Pattern : [#std::type_info#]typeid(<#expression-or-type#>) 191 // CHECK-CC4-NEXT: COMPLETION: Pattern : typename <#qualifier#>::<#name#> 192 // CHECK-CC4-NEXT: COMPLETION: Pattern : typeof <#expression#> 193 // CHECK-CC4-NEXT: COMPLETION: Pattern : typeof(<#type#>) 194 // CHECK-CC4-NEXT: COMPLETION: union 195 // CHECK-CC4-NEXT: COMPLETION: unsigned 196 // CHECK-CC4-NEXT: COMPLETION: void 197 // CHECK-CC4-NEXT: COMPLETION: volatile 198 // CHECK-CC4-NEXT: COMPLETION: wchar_t 199 // CHECK-CC4-NEXT: COMPLETION: X : X 200 // CHECK-CC4-NEXT: COMPLETION: y : [#int#]y 201 // CHECK-CC4-NEXT: COMPLETION: z : [#void#]z(<#int#>) 202 203 // RUN: %clang_cc1 -fsyntax-only -fno-rtti -code-completion-patterns -code-completion-at=%s:6:14 -std=gnu++11 %s -o - | FileCheck -check-prefix=CHECK-NO-RTTI %s 204 // CHECK-NO-RTTI: COMPLETION: bool 205 // CHECK-NO-RTTI-NEXT: COMPLETION: char 206 // CHECK-NO-RTTI-NEXT: COMPLETION: char16_t 207 // CHECK-NO-RTTI-NEXT: COMPLETION: char32_t 208 // CHECK-NO-RTTI-NEXT: COMPLETION: class 209 // CHECK-NO-RTTI-NEXT: COMPLETION: const 210 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : const_cast<<#type#>>(<#expression#>) 211 // CHECK-NO-RTTI: COMPLETION: Pattern : [#void#]delete <#expression#> 212 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : [#void#]delete [] <#expression#> 213 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : do{<#statements#> 214 // CHECK-NO-RTTI: COMPLETION: double 215 // CHECK-NO-RTTI-NOT: dynamic_cast 216 // CHECK-NO-RTTI: COMPLETION: enum 217 // CHECK-NO-RTTI-NEXT: COMPLETION: extern 218 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : [#bool#]false 219 // CHECK-NO-RTTI-NEXT: COMPLETION: float 220 // CHECK-NO-RTTI-NEXT: COMPLETION: foo : [#void#]foo() 221 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : for(<#init-statement#>;<#condition#>;<#inc-expression#>){ 222 // CHECK-NO-RTTI: COMPLETION: Pattern : goto <#label#> 223 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : if(<#condition#>){<#statements#> 224 // CHECK-NO-RTTI: COMPLETION: int 225 // CHECK-NO-RTTI-NEXT: COMPLETION: long 226 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : new <#type#>(<#expressions#>) 227 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : new <#type#>[<#size#>](<#expressions#>) 228 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : [#bool#]noexcept(<#expression#>) 229 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : [#std::nullptr_t#]nullptr 230 // CHECK-NO-RTTI-NEXT: COMPLETION: operator 231 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : reinterpret_cast<<#type#>>(<#expression#>) 232 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : return 233 // CHECK-NO-RTTI-NEXT: COMPLETION: short 234 // CHECK-NO-RTTI-NEXT: COMPLETION: signed 235 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : [#size_t#]sizeof(<#expression-or-type#>) 236 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : [#size_t#]sizeof...(<#parameter-pack#>) 237 // CHECK-NO-RTTI-NEXT: COMPLETION: static 238 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : static_assert(<#expression#>, <#message#>) 239 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : static_cast<<#type#>>(<#expression#>) 240 // CHECK-NO-RTTI-NEXT: COMPLETION: struct 241 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : switch(<#condition#>){ 242 // CHECK-NO-RTTI: COMPLETION: t : t 243 // CHECK-NO-RTTI-NOT: throw 244 // CHECK-NO-RTTI: COMPLETION: Pattern : [#bool#]true 245 // CHECK-NO-RTTI-NOT: try 246 // CHECK-NO-RTTI: COMPLETION: TYPEDEF : TYPEDEF 247 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : typedef <#type#> <#name#> 248 // CHECK-NO-RTTI-NOT: typeid 249 // CHECK-NO-RTTI: COMPLETION: Pattern : typename <#qualifier#>::<#name#> 250 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : typeof <#expression#> 251 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : typeof(<#type#>) 252 // CHECK-NO-RTTI-NEXT: COMPLETION: union 253 // CHECK-NO-RTTI-NEXT: COMPLETION: unsigned 254 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : using namespace <#identifier#> 255 // CHECK-NO-RTTI-NEXT: COMPLETION: void 256 // CHECK-NO-RTTI-NEXT: COMPLETION: volatile 257 // CHECK-NO-RTTI-NEXT: COMPLETION: wchar_t 258 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : while(<#condition#>){<#statements#> 259 // CHECK-NO-RTTI: COMPLETION: X : X 260 // CHECK-NO-RTTI-NEXT: COMPLETION: y : [#int#]y 261 // CHECK-NO-RTTI-NEXT: COMPLETION: z : [#void#]z(<#int#>) 262