struct X { int x; }; void z(int); typedef struct t TYPEDEF; void foo() { int y = 17; // 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 // CHECK-CC1: COMPLETION: bool // CHECK-CC1-NEXT: COMPLETION: char // CHECK-CC1-NEXT: COMPLETION: char16 // CHECK-CC1-NEXT: COMPLETION: char32 // CHECK-CC1-NEXT: COMPLETION: class // CHECK-CC1-NEXT: COMPLETION: const // CHECK-CC1-NEXT: COMPLETION: Pattern : const_cast<<#type#>>(<#expression#>) // CHECK-CC1: COMPLETION: Pattern : [#void#]delete <#expression#> // CHECK-CC1-NEXT: COMPLETION: Pattern : [#void#]delete [] <#expression#> // CHECK-CC1-NEXT: COMPLETION: Pattern : do{<#statements#> // CHECK-CC1: COMPLETION: double // CHECK-CC1-NEXT: COMPLETION: Pattern : dynamic_cast<<#type#>>(<#expression#>) // CHECK-CC1-NEXT: COMPLETION: enum // CHECK-CC1-NEXT: COMPLETION: extern // CHECK-CC1-NEXT: COMPLETION: Pattern : [#bool#]false // CHECK-CC1-NEXT: COMPLETION: float // CHECK-CC1-NEXT: COMPLETION: foo : [#void#]foo() // CHECK-CC1-NEXT: COMPLETION: Pattern : for(<#init-statement#>;<#condition#>;<#inc-expression#>){ // CHECK-CC1: COMPLETION: Pattern : goto <#label#> // CHECK-CC1-NEXT: COMPLETION: Pattern : if(<#condition#>){<#statements#> // CHECK-CC1: COMPLETION: int // CHECK-CC1-NEXT: COMPLETION: long // CHECK-CC1-NEXT: COMPLETION: Pattern : new <#type#>(<#expressions#>) // CHECK-CC1-NEXT: COMPLETION: Pattern : new <#type#>[<#size#>](<#expressions#>) // CHECK-CC1-NEXT: COMPLETION: Pattern : [#bool#]noexcept(<#expression#>) // CHECK-CC1-NEXT: COMPLETION: Pattern : [#std::nullptr_t#]nullptr // CHECK-CC1-NEXT: COMPLETION: operator // CHECK-CC1-NEXT: COMPLETION: Pattern : reinterpret_cast<<#type#>>(<#expression#>) // CHECK-CC1-NEXT: COMPLETION: Pattern : return // CHECK-CC1-NEXT: COMPLETION: short // CHECK-CC1-NEXT: COMPLETION: signed // CHECK-CC1-NEXT: COMPLETION: Pattern : [#size_t#]sizeof(<#expression-or-type#>) // CHECK-CC1-NEXT: COMPLETION: Pattern : [#size_t#]sizeof...(<#parameter-pack#>) // CHECK-CC1-NEXT: COMPLETION: static // CHECK-CC1-NEXT: COMPLETION: Pattern : static_cast<<#type#>>(<#expression#>) // CHECK-CC1-NEXT: COMPLETION: struct // CHECK-CC1-NEXT: COMPLETION: Pattern : switch(<#condition#>){ // CHECK-CC1: COMPLETION: t : t // CHECK-CC1-NEXT: COMPLETION: Pattern : [#void#]throw <#expression#> // CHECK-CC1-NEXT: COMPLETION: Pattern : [#bool#]true // CHECK-CC1-NEXT: COMPLETION: Pattern : try{<#statements#> // CHECK-CC1: COMPLETION: TYPEDEF : TYPEDEF // CHECK-CC1-NEXT: COMPLETION: Pattern : typedef <#type#> <#name#> // CHECK-CC1-NEXT: COMPLETION: Pattern : [#std::type_info#]typeid(<#expression-or-type#>) // CHECK-CC1-NEXT: COMPLETION: Pattern : typename <#qualifier#>::<#name#> // CHECK-CC1-NEXT: COMPLETION: Pattern : typeof <#expression#> // CHECK-CC1-NEXT: COMPLETION: Pattern : typeof(<#type#>) // CHECK-CC1-NEXT: COMPLETION: union // CHECK-CC1-NEXT: COMPLETION: unsigned // CHECK-CC1-NEXT: COMPLETION: Pattern : using namespace <#identifier#> // CHECK-CC1-NEXT: COMPLETION: void // CHECK-CC1-NEXT: COMPLETION: volatile // CHECK-CC1-NEXT: COMPLETION: wchar_t // CHECK-CC1-NEXT: COMPLETION: Pattern : while(<#condition#>){<#statements#> // CHECK-CC1: COMPLETION: X : X // CHECK-CC1-NEXT: COMPLETION: y : [#int#]y // CHECK-CC1-NEXT: COMPLETION: z : [#void#]z(<#int#>) // 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 // CHECK-CC2: COMPLETION: Pattern : asm(<#string-literal#>) // CHECK-CC2: COMPLETION: auto // CHECK-CC2-NEXT: COMPLETION: bool // CHECK-CC2-NEXT: COMPLETION: char // CHECK-CC2-NEXT: COMPLETION: char16 // CHECK-CC2-NEXT: COMPLETION: char32 // CHECK-CC2-NEXT: COMPLETION: class // CHECK-CC2-NEXT: COMPLETION: const // CHECK-CC2-NEXT: COMPLETION: Pattern : decltype(<#expression#>) // CHECK-CC2-NEXT: COMPLETION: double // CHECK-CC2-NEXT: COMPLETION: enum // CHECK-CC2-NEXT: COMPLETION: extern // CHECK-CC2-NEXT: COMPLETION: float // CHECK-CC2-NEXT: COMPLETION: inline // CHECK-CC2-NEXT: COMPLETION: int // CHECK-CC2-NEXT: COMPLETION: long // CHECK-CC2-NEXT: COMPLETION: Pattern : namespace <#identifier#>{<#declarations#> // CHECK-CC2: COMPLETION: Pattern : namespace <#name#> = <#namespace#> // CHECK-CC2-NEXT: COMPLETION: operator // CHECK-CC2-NEXT: COMPLETION: short // CHECK-CC2-NEXT: COMPLETION: signed // CHECK-CC2-NEXT: COMPLETION: static // CHECK-CC2-NEXT: COMPLETION: struct // CHECK-CC2-NEXT: COMPLETION: t : t // CHECK-CC2-NEXT: COMPLETION: Pattern : template <#declaration#> // CHECK-CC2-NEXT: COMPLETION: Pattern : template<<#parameters#>> // CHECK-CC2-NEXT: COMPLETION: TYPEDEF : TYPEDEF // CHECK-CC2-NEXT: COMPLETION: Pattern : typedef <#type#> <#name#> // CHECK-CC2-NEXT: COMPLETION: Pattern : typename <#qualifier#>::<#name#> // CHECK-CC2-NEXT: COMPLETION: Pattern : typeof <#expression#> // CHECK-CC2-NEXT: COMPLETION: Pattern : typeof(<#type#>) // CHECK-CC2-NEXT: COMPLETION: union // CHECK-CC2-NEXT: COMPLETION: unsigned // CHECK-CC2-NEXT: COMPLETION: Pattern : using namespace <#identifier#> // CHECK-CC2-NEXT: COMPLETION: Pattern : using <#qualifier#>::<#name#> // CHECK-CC2-NEXT: COMPLETION: void // CHECK-CC2-NEXT: COMPLETION: volatile // CHECK-CC2-NEXT: COMPLETION: wchar_t // CHECK-CC2-NEXT: COMPLETION: X : X // 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 // CHECK-CC3: COMPLETION: bool // CHECK-CC3-NEXT: COMPLETION: char // CHECK-CC3-NEXT: COMPLETION: char16_t // CHECK-CC3-NEXT: COMPLETION: char32_t // CHECK-CC3-NEXT: COMPLETION: class // CHECK-CC3-NEXT: COMPLETION: const // CHECK-CC3-NEXT: COMPLETION: Pattern : decltype(<#expression#>) // CHECK-CC3-NEXT: COMPLETION: double // CHECK-CC3-NEXT: COMPLETION: enum // CHECK-CC3-NEXT: COMPLETION: explicit // CHECK-CC3-NEXT: COMPLETION: extern // CHECK-CC3-NEXT: COMPLETION: float // CHECK-CC3-NEXT: COMPLETION: friend // CHECK-CC3-NEXT: COMPLETION: inline // CHECK-CC3-NEXT: COMPLETION: int // CHECK-CC3-NEXT: COMPLETION: long // CHECK-CC3-NEXT: COMPLETION: mutable // CHECK-CC3-NEXT: COMPLETION: operator // CHECK-CC3-NEXT: COMPLETION: Pattern : private: // CHECK-CC3-NEXT: COMPLETION: Pattern : protected: // CHECK-CC3-NEXT: COMPLETION: Pattern : public: // CHECK-CC3-NEXT: COMPLETION: short // CHECK-CC3-NEXT: COMPLETION: signed // CHECK-CC3-NEXT: COMPLETION: static // CHECK-CC3-NEXT: COMPLETION: struct // CHECK-CC3-NEXT: COMPLETION: Pattern : template<<#parameters#>> // CHECK-CC3-NEXT: COMPLETION: Pattern : typedef <#type#> <#name#> // CHECK-CC3-NEXT: COMPLETION: Pattern : typename <#qualifier#>::<#name#> // CHECK-CC3-NEXT: COMPLETION: Pattern : typeof <#expression#> // CHECK-CC3-NEXT: COMPLETION: Pattern : typeof(<#type#>) // CHECK-CC3-NEXT: COMPLETION: union // CHECK-CC3-NEXT: COMPLETION: unsigned // CHECK-CC3-NEXT: COMPLETION: Pattern : using <#qualifier#>::<#name#> // CHECK-CC3-NEXT: COMPLETION: virtual // CHECK-CC3-NEXT: COMPLETION: void // CHECK-CC3-NEXT: COMPLETION: volatile // CHECK-CC3-NEXT: COMPLETION: wchar_t // CHECK-CC3-NEXT: COMPLETION: X : X // 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 // CHECK-CC4: COMPLETION: bool // CHECK-CC4-NEXT: COMPLETION: char // CHECK-CC4-NEXT: COMPLETION: char16_t // CHECK-CC4-NEXT: COMPLETION: char32_t // CHECK-CC4-NEXT: COMPLETION: class // CHECK-CC4-NEXT: COMPLETION: const // CHECK-CC4-NEXT: COMPLETION: Pattern : const_cast<<#type#>>(<#expression#>) // CHECK-CC4-NEXT: COMPLETION: Pattern : decltype(<#expression#>) // CHECK-CC4-NEXT: COMPLETION: Pattern : [#void#]delete <#expression#> // CHECK-CC4-NEXT: COMPLETION: Pattern : [#void#]delete [] <#expression#> // CHECK-CC4-NEXT: COMPLETION: double // CHECK-CC4-NEXT: COMPLETION: Pattern : dynamic_cast<<#type#>>(<#expression#>) // CHECK-CC4-NEXT: COMPLETION: enum // CHECK-CC4-NEXT: COMPLETION: Pattern : [#bool#]false // CHECK-CC4-NEXT: COMPLETION: float // CHECK-CC4-NEXT: COMPLETION: foo : [#void#]foo() // CHECK-CC4-NEXT: COMPLETION: int // CHECK-CC4-NEXT: COMPLETION: long // CHECK-CC4-NEXT: COMPLETION: Pattern : new <#type#>(<#expressions#>) // CHECK-CC4-NEXT: COMPLETION: Pattern : new <#type#>[<#size#>](<#expressions#>) // CHECK-CC4-NEXT: COMPLETION: Pattern : [#bool#]noexcept(<#expression#>) // CHECK-CC4-NEXT: COMPLETION: Pattern : [#std::nullptr_t#]nullptr // CHECK-CC4-NEXT: COMPLETION: operator // CHECK-CC4-NEXT: COMPLETION: Pattern : reinterpret_cast<<#type#>>(<#expression#>) // CHECK-CC4-NEXT: COMPLETION: short // CHECK-CC4-NEXT: COMPLETION: signed // CHECK-CC4-NEXT: COMPLETION: Pattern : [#size_t#]sizeof(<#expression-or-type#>) // CHECK-CC4-NEXT: COMPLETION: Pattern : [#size_t#]sizeof...(<#parameter-pack#>) // CHECK-CC4-NEXT: COMPLETION: Pattern : static_cast<<#type#>>(<#expression#>) // CHECK-CC4-NEXT: COMPLETION: struct // CHECK-CC4-NEXT: COMPLETION: t : t // CHECK-CC4-NEXT: COMPLETION: Pattern : [#void#]throw <#expression#> // CHECK-CC4-NEXT: COMPLETION: Pattern : [#bool#]true // CHECK-CC4-NEXT: COMPLETION: TYPEDEF : TYPEDEF // CHECK-CC4-NEXT: COMPLETION: Pattern : [#std::type_info#]typeid(<#expression-or-type#>) // CHECK-CC4-NEXT: COMPLETION: Pattern : typename <#qualifier#>::<#name#> // CHECK-CC4-NEXT: COMPLETION: Pattern : typeof <#expression#> // CHECK-CC4-NEXT: COMPLETION: Pattern : typeof(<#type#>) // CHECK-CC4-NEXT: COMPLETION: union // CHECK-CC4-NEXT: COMPLETION: unsigned // CHECK-CC4-NEXT: COMPLETION: void // CHECK-CC4-NEXT: COMPLETION: volatile // CHECK-CC4-NEXT: COMPLETION: wchar_t // CHECK-CC4-NEXT: COMPLETION: X : X // CHECK-CC4-NEXT: COMPLETION: y : [#int#]y // CHECK-CC4-NEXT: COMPLETION: z : [#void#]z(<#int#>) // 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 // CHECK-NO-RTTI: COMPLETION: bool // CHECK-NO-RTTI-NEXT: COMPLETION: char // CHECK-NO-RTTI-NEXT: COMPLETION: char16_t // CHECK-NO-RTTI-NEXT: COMPLETION: char32_t // CHECK-NO-RTTI-NEXT: COMPLETION: class // CHECK-NO-RTTI-NEXT: COMPLETION: const // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : const_cast<<#type#>>(<#expression#>) // CHECK-NO-RTTI: COMPLETION: Pattern : [#void#]delete <#expression#> // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : [#void#]delete [] <#expression#> // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : do{<#statements#> // CHECK-NO-RTTI: COMPLETION: double // CHECK-NO-RTTI-NOT: dynamic_cast // CHECK-NO-RTTI: COMPLETION: enum // CHECK-NO-RTTI-NEXT: COMPLETION: extern // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : [#bool#]false // CHECK-NO-RTTI-NEXT: COMPLETION: float // CHECK-NO-RTTI-NEXT: COMPLETION: foo : [#void#]foo() // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : for(<#init-statement#>;<#condition#>;<#inc-expression#>){ // CHECK-NO-RTTI: COMPLETION: Pattern : goto <#label#> // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : if(<#condition#>){<#statements#> // CHECK-NO-RTTI: COMPLETION: int // CHECK-NO-RTTI-NEXT: COMPLETION: long // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : new <#type#>(<#expressions#>) // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : new <#type#>[<#size#>](<#expressions#>) // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : [#bool#]noexcept(<#expression#>) // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : [#std::nullptr_t#]nullptr // CHECK-NO-RTTI-NEXT: COMPLETION: operator // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : reinterpret_cast<<#type#>>(<#expression#>) // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : return // CHECK-NO-RTTI-NEXT: COMPLETION: short // CHECK-NO-RTTI-NEXT: COMPLETION: signed // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : [#size_t#]sizeof(<#expression-or-type#>) // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : [#size_t#]sizeof...(<#parameter-pack#>) // CHECK-NO-RTTI-NEXT: COMPLETION: static // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : static_cast<<#type#>>(<#expression#>) // CHECK-NO-RTTI-NEXT: COMPLETION: struct // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : switch(<#condition#>){ // CHECK-NO-RTTI: COMPLETION: t : t // CHECK-NO-RTTI-NOT: throw // CHECK-NO-RTTI: COMPLETION: Pattern : [#bool#]true // CHECK-NO-RTTI-NOT: try // CHECK-NO-RTTI: COMPLETION: TYPEDEF : TYPEDEF // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : typedef <#type#> <#name#> // CHECK-NO-RTTI-NOT: typeid // CHECK-NO-RTTI: COMPLETION: Pattern : typename <#qualifier#>::<#name#> // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : typeof <#expression#> // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : typeof(<#type#>) // CHECK-NO-RTTI-NEXT: COMPLETION: union // CHECK-NO-RTTI-NEXT: COMPLETION: unsigned // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : using namespace <#identifier#> // CHECK-NO-RTTI-NEXT: COMPLETION: void // CHECK-NO-RTTI-NEXT: COMPLETION: volatile // CHECK-NO-RTTI-NEXT: COMPLETION: wchar_t // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : while(<#condition#>){<#statements#> // CHECK-NO-RTTI: COMPLETION: X : X // CHECK-NO-RTTI-NEXT: COMPLETION: y : [#int#]y // CHECK-NO-RTTI-NEXT: COMPLETION: z : [#void#]z(<#int#>)