diff options
Diffstat (limited to 'test/CodeCompletion')
-rw-r--r-- | test/CodeCompletion/crash-null-type.cpp | 8 | ||||
-rw-r--r-- | test/CodeCompletion/crash-skipped-bodies-template-inst.cpp | 2 | ||||
-rw-r--r-- | test/CodeCompletion/included-frameworks.m | 29 | ||||
-rw-r--r-- | test/CodeCompletion/ordinary-name-cxx11.cpp | 18 | ||||
-rw-r--r-- | test/CodeCompletion/ordinary-name.cpp | 20 | ||||
-rw-r--r-- | test/CodeCompletion/patterns.cpp | 39 | ||||
-rw-r--r-- | test/CodeCompletion/skip-auto-funcs.cpp | 2 |
7 files changed, 97 insertions, 21 deletions
diff --git a/test/CodeCompletion/crash-null-type.cpp b/test/CodeCompletion/crash-null-type.cpp new file mode 100644 index 0000000000..c5b3d1e793 --- /dev/null +++ b/test/CodeCompletion/crash-null-type.cpp @@ -0,0 +1,8 @@ +void test() { + for (auto [loopVar] : y) { // y has to be unresolved + loopVa + } +} +// RUN: not %clang_cc1 -fsyntax-only -code-completion-at=%s:3:11 %s -o - \ +// RUN: | FileCheck %s +// CHECK: COMPLETION: loopVar diff --git a/test/CodeCompletion/crash-skipped-bodies-template-inst.cpp b/test/CodeCompletion/crash-skipped-bodies-template-inst.cpp index 6161f100cb..7fec995ba0 100644 --- a/test/CodeCompletion/crash-skipped-bodies-template-inst.cpp +++ b/test/CodeCompletion/crash-skipped-bodies-template-inst.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:24:5 %s -o - 2>&1 | FileCheck %s +// RUN: %clang_cc1 -fsyntax-only -std=c++14 -code-completion-at=%s:24:5 %s -o - 2>&1 | FileCheck %s template <class T> auto make_func() { struct impl { diff --git a/test/CodeCompletion/included-frameworks.m b/test/CodeCompletion/included-frameworks.m new file mode 100644 index 0000000000..737a360a8f --- /dev/null +++ b/test/CodeCompletion/included-frameworks.m @@ -0,0 +1,29 @@ +// RUN: rm -rf %t && mkdir -p %t/Foo.framework/Headers/SubFolder && mkdir %t/NotAFramework/ +// RUN: touch %t/Foo.framework/Headers/Foo.h && touch %t/Foo.framework/Headers/FOOClass.h +// RUN: touch %t/Foo.framework/Headers/SubFolder/FOOInternal.h + +#import <Foo/Foo.h> + +#import <Foo/SubFolder/FOOInternal.h> + +// Note: the run lines follow their respective tests, since line/column +// matter in this test. + +// Autocomplete frameworks without the ".framework" extension. +// +// RUN: %clang -fsyntax-only -F %t -Xclang -code-completion-at=%s:5:10 %s -o - | FileCheck -check-prefix=CHECK-1 %s +// CHECK-1-NOT: Foo.framework/ +// CHECK-1-NOT: NotAFramework/ +// CHECK-1: Foo/ + +// Autocomplete for frameworks inside its Headers folder. +// +// RUN: %clang -fsyntax-only -F %t -Xclang -code-completion-at=%s:5:14 %s -o - | FileCheck -check-prefix=CHECK-2 %s +// CHECK-2: Foo.h> +// CHECK-2: FOOClass.h> +// CHECK-2: SubFolder/ + +// Autocomplete for folders inside of a frameworks. +// +// RUN: %clang -fsyntax-only -F %t -Xclang -code-completion-at=%s:7:24 %s -o - | FileCheck -check-prefix=CHECK-3 %s +// CHECK-3: FOOInternal.h> diff --git a/test/CodeCompletion/ordinary-name-cxx11.cpp b/test/CodeCompletion/ordinary-name-cxx11.cpp index 0125ffbbb3..7816243e8f 100644 --- a/test/CodeCompletion/ordinary-name-cxx11.cpp +++ b/test/CodeCompletion/ordinary-name-cxx11.cpp @@ -23,7 +23,7 @@ void foo() { // 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: COMPLETION: Pattern : goto <#label#>; // CHECK-CC1-NEXT: COMPLETION: Pattern : if(<#condition#>){<#statements#> // CHECK-CC1: COMPLETION: int // CHECK-CC1-NEXT: COMPLETION: long @@ -33,7 +33,7 @@ void foo() { // 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: Pattern : return; // CHECK-CC1-NEXT: COMPLETION: short // CHECK-CC1-NEXT: COMPLETION: signed // CHECK-CC1-NEXT: COMPLETION: Pattern : [#size_t#]sizeof(<#expression-or-type#>) @@ -56,7 +56,7 @@ void foo() { // 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: Pattern : using namespace <#identifier#>; // CHECK-CC1-NEXT: COMPLETION: void // CHECK-CC1-NEXT: COMPLETION: volatile // CHECK-CC1-NEXT: COMPLETION: wchar_t @@ -84,7 +84,7 @@ void foo() { // 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: COMPLETION: Pattern : namespace <#name#> = <#namespace#>; // CHECK-CC2-NEXT: COMPLETION: operator // CHECK-CC2-NEXT: COMPLETION: short // CHECK-CC2-NEXT: COMPLETION: signed @@ -102,8 +102,8 @@ void foo() { // 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: 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 @@ -218,7 +218,7 @@ void foo() { // 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: COMPLETION: Pattern : goto <#label#>; // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : if(<#condition#>){<#statements#> // CHECK-NO-RTTI: COMPLETION: int // CHECK-NO-RTTI-NEXT: COMPLETION: long @@ -228,7 +228,7 @@ void foo() { // 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: 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#>) @@ -250,7 +250,7 @@ void foo() { // 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: Pattern : using namespace <#identifier#>; // CHECK-NO-RTTI-NEXT: COMPLETION: void // CHECK-NO-RTTI-NEXT: COMPLETION: volatile // CHECK-NO-RTTI-NEXT: COMPLETION: wchar_t diff --git a/test/CodeCompletion/ordinary-name.cpp b/test/CodeCompletion/ordinary-name.cpp index ba613bc915..90f9a6ff3b 100644 --- a/test/CodeCompletion/ordinary-name.cpp +++ b/test/CodeCompletion/ordinary-name.cpp @@ -21,7 +21,7 @@ void foo() { // 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: COMPLETION: Pattern : goto <#label#>; // CHECK-CC1-NEXT: COMPLETION: Pattern : if(<#condition#>){<#statements#> // CHECK-CC1: COMPLETION: int // CHECK-CC1-NEXT: COMPLETION: long @@ -29,7 +29,7 @@ void foo() { // CHECK-CC1-NEXT: COMPLETION: Pattern : new <#type#>[<#size#>](<#expressions#>) // CHECK-CC1-NEXT: COMPLETION: operator // CHECK-CC1-NEXT: COMPLETION: Pattern : reinterpret_cast<<#type#>>(<#expression#>) - // CHECK-CC1-NEXT: COMPLETION: Pattern : return + // 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#>) @@ -49,7 +49,7 @@ void foo() { // 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: Pattern : using namespace <#identifier#>; // CHECK-CC1-NEXT: COMPLETION: void // CHECK-CC1-NEXT: COMPLETION: volatile // CHECK-CC1-NEXT: COMPLETION: wchar_t @@ -72,7 +72,7 @@ void foo() { // 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: COMPLETION: Pattern : namespace <#name#> = <#namespace#>; // CHECK-CC2-NEXT: COMPLETION: operator // CHECK-CC2-NEXT: COMPLETION: short // CHECK-CC2-NEXT: COMPLETION: signed @@ -88,8 +88,8 @@ void foo() { // 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: 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 @@ -125,7 +125,7 @@ void foo() { // 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: Pattern : using <#qualifier#>::<#name#>; // CHECK-CC3-NEXT: COMPLETION: virtual // CHECK-CC3-NEXT: COMPLETION: void // CHECK-CC3-NEXT: COMPLETION: volatile @@ -190,7 +190,7 @@ void foo() { // 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: COMPLETION: Pattern : goto <#label#>; // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : if(<#condition#>){<#statements#> // CHECK-NO-RTTI: COMPLETION: int // CHECK-NO-RTTI-NEXT: COMPLETION: long @@ -198,7 +198,7 @@ void foo() { // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : new <#type#>[<#size#>](<#expressions#>) // 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: 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#>) @@ -218,7 +218,7 @@ void foo() { // 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: Pattern : using namespace <#identifier#>; // CHECK-NO-RTTI-NEXT: COMPLETION: void // CHECK-NO-RTTI-NEXT: COMPLETION: volatile // CHECK-NO-RTTI-NEXT: COMPLETION: wchar_t diff --git a/test/CodeCompletion/patterns.cpp b/test/CodeCompletion/patterns.cpp new file mode 100644 index 0000000000..1958529687 --- /dev/null +++ b/test/CodeCompletion/patterns.cpp @@ -0,0 +1,39 @@ +void loops() { + while (true) { + // line 3 + } + for (;;) { + // line 6 + } + do { + // line 9 + } while (true); + // line 11 +} +// RUN: %clang_cc1 -fsyntax-only -code-completion-patterns -code-completion-at=%s:3:1 %s -o - | FileCheck -check-prefix=LOOP %s +// RUN: %clang_cc1 -fsyntax-only -code-completion-patterns -code-completion-at=%s:6:1 %s -o - | FileCheck -check-prefix=LOOP %s +// RUN: %clang_cc1 -fsyntax-only -code-completion-patterns -code-completion-at=%s:9:1 %s -o - | FileCheck -check-prefix=LOOP %s +// LOOP: COMPLETION: Pattern : break;{{$}} +// LOOP: COMPLETION: Pattern : continue;{{$}} +// LOOP: COMPLETION: Pattern : goto <#label#>;{{$}} +// LOOP: COMPLETION: Pattern : return;{{$}} +// +// RUN: %clang_cc1 -fsyntax-only -code-completion-patterns -code-completion-at=%s:11:1 %s -o - | FileCheck -check-prefix=OUTSIDE-LOOP %s +// OUTSIDE-LOOP-NOT: COMPLETION: Pattern : break;{{$}} +// OUTSIDE-LOOP-NOT: COMPLETION: Pattern : continue;{{$}} +// OUTSIDE-LOOP: COMPLETION: Pattern : goto <#label#>;{{$}} +// OUTSIDE-LOOP: COMPLETION: Pattern : return;{{$}} + +int value_return() { + // line 28 +} +void void_return() { + // line 31 +} +// RUN: %clang_cc1 -fsyntax-only -code-completion-patterns -code-completion-at=%s:28:1 %s -o - | FileCheck -check-prefix=RETURN-VAL %s +// RETURN-VAL-NOT: COMPLETION: Pattern : return;{{$}} +// RETURN-VAL: COMPLETION: Pattern : return <#expression#>;{{$}} + +// RUN: %clang_cc1 -fsyntax-only -code-completion-patterns -code-completion-at=%s:31:1 %s -o - | FileCheck -check-prefix=RETURN-VOID %s +// RETURN-VOID-NOT: COMPLETION: Pattern : return <#expression#>;{{$}} +// RETURN-VOID: COMPLETION: Pattern : return;{{$}} diff --git a/test/CodeCompletion/skip-auto-funcs.cpp b/test/CodeCompletion/skip-auto-funcs.cpp index ab2465d7fb..c0fa0f556d 100644 --- a/test/CodeCompletion/skip-auto-funcs.cpp +++ b/test/CodeCompletion/skip-auto-funcs.cpp @@ -1,7 +1,7 @@ // We run clang in completion mode to force skipping of function bodies and // check if the function bodies were skipped by observing the warnings that // clang produces. -// RUN: not %clang_cc1 -fsyntax-only -code-completion-at=%s:60:1 %s -o - 2>&1 | FileCheck %s +// RUN: not %clang_cc1 -std=c++14 -fsyntax-only -code-completion-at=%s:60:1 %s -o - 2>&1 | FileCheck %s template <class T> auto not_skipped() { int x; |