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 } bool bool_return() { // line 34 } int *ptr_return() { // line 37 } struct Cls {}; int Cls::*memptr_return() { // line 41 } // 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-NOT: COMPLETION: Pattern : return false; // RETURN-VAL-NOT: COMPLETION: Pattern : return true; // RETURN-VAL-NOT: COMPLETION: Pattern : return nullptr; // 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 false; // RETURN-VOID-NOT: COMPLETION: Pattern : return true; // RETURN-VOID-NOT: COMPLETION: Pattern : return <#expression#>; // RETURN-VOID-NOT: COMPLETION: Pattern : return nullptr; // RETURN-VOID: COMPLETION: Pattern : return;{{$}} // RUN: %clang_cc1 -fsyntax-only -code-completion-patterns -code-completion-at=%s:34:1 %s -o - | FileCheck -check-prefix=RETURN-BOOL %s // RETURN-BOOL-NOT: COMPLETION: Pattern : return; // RETURN-BOOL-NOT: COMPLETION: Pattern : return nullptr; // RETURN-BOOL: COMPLETION: Pattern : return <#expression#>;{{$}} // RETURN-BOOL: COMPLETION: Pattern : return false;{{$}} // RETURN-BOOL: COMPLETION: Pattern : return true;{{$}} // Check both pointer and member pointer return types. // RUN: %clang_cc1 -fsyntax-only -std=c++11 -code-completion-patterns -code-completion-at=%s:37:1 %s -o - | FileCheck -check-prefix=RETURN-PTR %s // RUN: %clang_cc1 -fsyntax-only -std=c++11 -code-completion-patterns -code-completion-at=%s:41:1 %s -o - | FileCheck -check-prefix=RETURN-PTR %s // RETURN-PTR-NOT: COMPLETION: Pattern : return false;{{$}} // RETURN-PTR-NOT: COMPLETION: Pattern : return true;{{$}} // RETURN-PTR-NOT: COMPLETION: Pattern : return; // RETURN-PTR: COMPLETION: Pattern : return <#expression#>;{{$}} // RETURN-PTR: COMPLETION: Pattern : return nullptr; // 'return nullptr' is not available before C++11. // RUN: %clang_cc1 -fsyntax-only -std=c++03 -code-completion-patterns -code-completion-at=%s:37:1 %s -o - | FileCheck -check-prefix=RETURN-PTR-STD03 %s // RUN: %clang_cc1 -fsyntax-only -std=c++03 -code-completion-patterns -code-completion-at=%s:41:1 %s -o - | FileCheck -check-prefix=RETURN-PTR-STD03 %s // RETURN-PTR-STD03-NOT: COMPLETION: Pattern : return nullptr; void something(); void unbraced_if() { if (true) something(); // line 83 } // RUN: %clang_cc1 -fsyntax-only -code-completion-patterns -code-completion-at=%s:83:3 %s -o - | FileCheck -check-prefix=UNBRACED-IF %s // UNBRACED-IF: COMPLETION: Pattern : else // UNBRACED-IF-NEXT: <#statement#>; // UNBRACED-IF: COMPLETION: Pattern : else if (<#condition#>) // UNBRACED-IF-NEXT: <#statement#>; void braced_if() { if (true) { something(); } // line 95 } // RUN: %clang_cc1 -fsyntax-only -code-completion-patterns -code-completion-at=%s:95:3 %s -o - | FileCheck -check-prefix=BRACED-IF %s // BRACED-IF: COMPLETION: Pattern : else { // BRACED-IF-NEXT: <#statements#> // BRACED-IF-NEXT: } // BRACED-IF: COMPLETION: Pattern : else if (<#condition#>) { // BRACED-IF-NEXT: <#statements#> // BRACED-IF-NEXT: }