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++98 %s -o - | FileCheck -check-prefix=CHECK-CC1 %s 8 // CHECK-CC1: COMPLETION: bool 9 // CHECK-CC1-NEXT: COMPLETION: char 10 // CHECK-CC1-NEXT: COMPLETION: class 11 // CHECK-CC1-NEXT: COMPLETION: const 12 // 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: 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-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: int 33 // CHECK-CC1-NEXT: COMPLETION: long 34 // CHECK-CC1-NEXT: COMPLETION: Pattern : new <#type#>(<#expressions#>) 35 // CHECK-CC1-NEXT: COMPLETION: Pattern : new <#type#>[<#size#>](<#expressions#>) 36 // CHECK-CC1-NEXT: COMPLETION: operator 37 // CHECK-CC1-NEXT: COMPLETION: Pattern : reinterpret_cast<<#type#>>(<#expression#>) 38 // CHECK-CC1-NEXT: COMPLETION: Pattern : return; 39 // CHECK-CC1-NEXT: COMPLETION: short 40 // CHECK-CC1-NEXT: COMPLETION: signed 41 // CHECK-CC1-NEXT: COMPLETION: Pattern : [#size_t#]sizeof(<#expression-or-type#>) 42 // CHECK-CC1-NEXT: COMPLETION: static 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: Pattern : [#void#]throw <#expression#> 48 // CHECK-CC1-NEXT: COMPLETION: Pattern : [#bool#]true 49 // 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 : TYPEDEF 55 // 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 <#qualifier#>::<#name#> 58 // CHECK-CC1-NEXT: COMPLETION: Pattern : typeof <#expression#> 59 // CHECK-CC1-NEXT: COMPLETION: Pattern : typeof(<#type#>) 60 // CHECK-CC1-NEXT: COMPLETION: union 61 // CHECK-CC1-NEXT: COMPLETION: unsigned 62 // CHECK-CC1-NEXT: COMPLETION: Pattern : using namespace <#identifier#>; 63 // CHECK-CC1-NEXT: COMPLETION: void 64 // CHECK-CC1-NEXT: COMPLETION: volatile 65 // CHECK-CC1-NEXT: COMPLETION: wchar_t 66 // CHECK-CC1-NEXT: COMPLETION: Pattern : while (<#condition#>) { 67 // CHECK-CC1-NEXT: <#statements#> 68 // CHECK-CC1-NEXT: } 69 // CHECK-CC1: COMPLETION: X : X 70 // CHECK-CC1-NEXT: COMPLETION: y : [#int#]y 71 // CHECK-CC1-NEXT: COMPLETION: z : [#void#]z(<#int#>) 72 73 // RUN: %clang_cc1 -fsyntax-only -code-completion-patterns -code-completion-at=%s:4:1 -std=gnu++98 %s -o - | FileCheck -check-prefix=CHECK-CC2 %s 74 // CHECK-CC2: COMPLETION: Pattern : asm(<#string-literal#>) 75 // CHECK-CC2-NEXT: COMPLETION: bool 76 // CHECK-CC2-NEXT: COMPLETION: char 77 // CHECK-CC2-NEXT: COMPLETION: class 78 // CHECK-CC2-NEXT: COMPLETION: const 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#> { 87 // CHECK-CC2-NEXT: <#declarations#> 88 // CHECK-CC2-NEXT: } 89 // CHECK-CC2: COMPLETION: Pattern : namespace <#name#> = <#namespace#>; 90 // CHECK-CC2-NEXT: COMPLETION: operator 91 // CHECK-CC2-NEXT: COMPLETION: short 92 // CHECK-CC2-NEXT: COMPLETION: signed 93 // CHECK-CC2-NEXT: COMPLETION: static 94 // CHECK-CC2-NEXT: COMPLETION: struct 95 // CHECK-CC2-NEXT: COMPLETION: t : t 96 // CHECK-CC2-NEXT: COMPLETION: Pattern : template <#declaration#> 97 // CHECK-CC2-NEXT: COMPLETION: Pattern : template<<#parameters#>> 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 <#qualifier#>::<#name#>; 106 // CHECK-CC2-NEXT: COMPLETION: Pattern : using namespace <#identifier#>; 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++98 %s -o - | FileCheck -check-prefix=CHECK-CC3 %s 113 // CHECK-CC3: COMPLETION: bool 114 // CHECK-CC3-NEXT: COMPLETION: char 115 // CHECK-CC3-NEXT: COMPLETION: class 116 // CHECK-CC3-NEXT: COMPLETION: const 117 // CHECK-CC3-NEXT: COMPLETION: double 118 // CHECK-CC3-NEXT: COMPLETION: enum 119 // CHECK-CC3-NEXT: COMPLETION: explicit 120 // CHECK-CC3-NEXT: COMPLETION: extern 121 // CHECK-CC3-NEXT: COMPLETION: float 122 // CHECK-CC3-NEXT: COMPLETION: friend 123 // CHECK-CC3-NEXT: COMPLETION: inline 124 // CHECK-CC3-NEXT: COMPLETION: int 125 // CHECK-CC3-NEXT: COMPLETION: long 126 // CHECK-CC3-NEXT: COMPLETION: mutable 127 // CHECK-CC3-NEXT: COMPLETION: operator 128 // CHECK-CC3-NEXT: COMPLETION: Pattern : private: 129 // CHECK-CC3-NEXT: COMPLETION: Pattern : protected: 130 // CHECK-CC3-NEXT: COMPLETION: Pattern : public: 131 // CHECK-CC3-NEXT: COMPLETION: short 132 // CHECK-CC3-NEXT: COMPLETION: signed 133 // CHECK-CC3-NEXT: COMPLETION: static 134 // CHECK-CC3-NEXT: COMPLETION: struct 135 // CHECK-CC3-NEXT: COMPLETION: Pattern : template<<#parameters#>> 136 // CHECK-CC3-NEXT: COMPLETION: Pattern : typedef <#type#> <#name#>; 137 // CHECK-CC3-NEXT: COMPLETION: Pattern : typename <#qualifier#>::<#name#> 138 // CHECK-CC3-NEXT: COMPLETION: Pattern : typeof <#expression#> 139 // CHECK-CC3-NEXT: COMPLETION: Pattern : typeof(<#type#>) 140 // CHECK-CC3-NEXT: COMPLETION: union 141 // CHECK-CC3-NEXT: COMPLETION: unsigned 142 // CHECK-CC3-NEXT: COMPLETION: Pattern : using <#qualifier#>::<#name#>; 143 // CHECK-CC3-NEXT: COMPLETION: virtual 144 // CHECK-CC3-NEXT: COMPLETION: void 145 // CHECK-CC3-NEXT: COMPLETION: volatile 146 // CHECK-CC3-NEXT: COMPLETION: wchar_t 147 // CHECK-CC3-NEXT: COMPLETION: X : X 148 149 // 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 %s 150 // CHECK-CC4: COMPLETION: bool 151 // CHECK-CC4-NEXT: COMPLETION: char 152 // CHECK-CC4-NEXT: COMPLETION: class 153 // CHECK-CC4-NEXT: COMPLETION: const 154 // CHECK-CC4-NEXT: COMPLETION: Pattern : const_cast<<#type#>>(<#expression#>) 155 // CHECK-CC4-NEXT: COMPLETION: Pattern : [#void#]delete <#expression#> 156 // CHECK-CC4-NEXT: COMPLETION: Pattern : [#void#]delete [] <#expression#> 157 // CHECK-CC4-NEXT: COMPLETION: double 158 // CHECK-CC4-NEXT: COMPLETION: Pattern : dynamic_cast<<#type#>>(<#expression#>) 159 // CHECK-CC4-NEXT: COMPLETION: enum 160 // CHECK-CC4-NEXT: COMPLETION: Pattern : [#bool#]false 161 // CHECK-CC4-NEXT: COMPLETION: float 162 // CHECK-CC4-NEXT: COMPLETION: foo : [#void#]foo() 163 // CHECK-CC4-NEXT: COMPLETION: int 164 // CHECK-CC4-NEXT: COMPLETION: long 165 // CHECK-CC4-NEXT: COMPLETION: Pattern : new <#type#>(<#expressions#>) 166 // CHECK-CC4-NEXT: COMPLETION: Pattern : new <#type#>[<#size#>](<#expressions#>) 167 // CHECK-CC4-NEXT: COMPLETION: operator 168 // CHECK-CC4-NEXT: COMPLETION: Pattern : reinterpret_cast<<#type#>>(<#expression#>) 169 // CHECK-CC4-NEXT: COMPLETION: short 170 // CHECK-CC4-NEXT: COMPLETION: signed 171 // CHECK-CC4-NEXT: COMPLETION: Pattern : [#size_t#]sizeof(<#expression-or-type#>) 172 // CHECK-CC4-NEXT: COMPLETION: Pattern : static_cast<<#type#>>(<#expression#>) 173 // CHECK-CC4-NEXT: COMPLETION: struct 174 // CHECK-CC4-NEXT: COMPLETION: t : t 175 // CHECK-CC4-NEXT: COMPLETION: Pattern : [#void#]throw <#expression#> 176 // CHECK-CC4-NEXT: COMPLETION: Pattern : [#bool#]true 177 // CHECK-CC4-NEXT: COMPLETION: TYPEDEF : TYPEDEF 178 // CHECK-CC4-NEXT: COMPLETION: Pattern : [#std::type_info#]typeid(<#expression-or-type#>) 179 // CHECK-CC4-NEXT: COMPLETION: Pattern : typename <#qualifier#>::<#name#> 180 // CHECK-CC4-NEXT: COMPLETION: Pattern : typeof <#expression#> 181 // CHECK-CC4-NEXT: COMPLETION: Pattern : typeof(<#type#>) 182 // CHECK-CC4-NEXT: COMPLETION: union 183 // CHECK-CC4-NEXT: COMPLETION: unsigned 184 // CHECK-CC4-NEXT: COMPLETION: void 185 // CHECK-CC4-NEXT: COMPLETION: volatile 186 // CHECK-CC4-NEXT: COMPLETION: wchar_t 187 // CHECK-CC4-NEXT: COMPLETION: X : X 188 // CHECK-CC4-NEXT: COMPLETION: z : [#void#]z(<#int#>) 189 190 // 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 %s 191 // CHECK-NO-RTTI: COMPLETION: bool 192 // CHECK-NO-RTTI-NEXT: COMPLETION: char 193 // CHECK-NO-RTTI-NEXT: COMPLETION: class 194 // CHECK-NO-RTTI-NEXT: COMPLETION: const 195 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : const_cast<<#type#>>(<#expression#>) 196 // CHECK-NO-RTTI: COMPLETION: Pattern : [#void#]delete <#expression#> 197 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : [#void#]delete [] <#expression#> 198 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : do { 199 // CHECK-NO-RTTI: COMPLETION: double 200 // CHECK-NO-RTTI-NOT: dynamic_cast 201 // CHECK-NO-RTTI: COMPLETION: enum 202 // CHECK-NO-RTTI-NEXT: COMPLETION: extern 203 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : [#bool#]false 204 // CHECK-NO-RTTI-NEXT: COMPLETION: float 205 // CHECK-NO-RTTI-NEXT: COMPLETION: foo : [#void#]foo() 206 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : for (<#init-statement#>; <#condition#>; <#inc-expression#>) { 207 // CHECK-NO-RTTI: COMPLETION: Pattern : goto <#label#>; 208 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : if (<#condition#>) { 209 // CHECK-NO-RTTI: COMPLETION: int 210 // CHECK-NO-RTTI-NEXT: COMPLETION: long 211 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : new <#type#>(<#expressions#>) 212 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : new <#type#>[<#size#>](<#expressions#>) 213 // CHECK-NO-RTTI-NEXT: COMPLETION: operator 214 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : reinterpret_cast<<#type#>>(<#expression#>) 215 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : return; 216 // CHECK-NO-RTTI-NEXT: COMPLETION: short 217 // CHECK-NO-RTTI-NEXT: COMPLETION: signed 218 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : [#size_t#]sizeof(<#expression-or-type#>) 219 // CHECK-NO-RTTI-NEXT: COMPLETION: static 220 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : static_cast<<#type#>>(<#expression#>) 221 // CHECK-NO-RTTI-NEXT: COMPLETION: struct 222 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : switch (<#condition#>) { 223 // CHECK-NO-RTTI: COMPLETION: t : t 224 // CHECK-NO-RTTI-NOT: throw 225 // CHECK-NO-RTTI: COMPLETION: Pattern : [#bool#]true 226 // CHECK-NO-RTTI-NOT: try 227 // CHECK-NO-RTTI: COMPLETION: TYPEDEF : TYPEDEF 228 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : typedef <#type#> <#name#>; 229 // CHECK-NO-RTTI-NOT: typeid 230 // CHECK-NO-RTTI: COMPLETION: Pattern : typename <#qualifier#>::<#name#> 231 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : typeof <#expression#> 232 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : typeof(<#type#>) 233 // CHECK-NO-RTTI-NEXT: COMPLETION: union 234 // CHECK-NO-RTTI-NEXT: COMPLETION: unsigned 235 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : using namespace <#identifier#>; 236 // CHECK-NO-RTTI-NEXT: COMPLETION: void 237 // CHECK-NO-RTTI-NEXT: COMPLETION: volatile 238 // CHECK-NO-RTTI-NEXT: COMPLETION: wchar_t 239 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : while (<#condition#>) { 240 // CHECK-NO-RTTI: COMPLETION: X : X 241 // CHECK-NO-RTTI-NEXT: COMPLETION: y : [#int#]y 242 // CHECK-NO-RTTI-NEXT: COMPLETION: z : [#void#]z(<#int#>) 243