diff options
Diffstat (limited to 'clang/test/SemaCXX/labeled-break-continue.cpp')
| -rw-r--r-- | clang/test/SemaCXX/labeled-break-continue.cpp | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/clang/test/SemaCXX/labeled-break-continue.cpp b/clang/test/SemaCXX/labeled-break-continue.cpp new file mode 100644 index 000000000000..3d34211ed745 --- /dev/null +++ b/clang/test/SemaCXX/labeled-break-continue.cpp @@ -0,0 +1,51 @@ +// RUN: %clang_cc1 -std=c++20 -verify -fsyntax-only -fnamed-loops %s + +int a[10]{}; +struct S { + int a[10]{}; +}; + +void f1() { + l1: for (int x : a) { + break l1; + continue l1; + } + + l2: for (int x : a) { + break l1; // expected-error {{'break' label does not name an enclosing loop or 'switch'}} + continue l1; // expected-error {{'continue' label does not name an enclosing loop}} + } + + l3: for (int x : a) { + l4: for (int x : a) { + break l3; + break l4; + continue l3; + continue l4; + } + } +} + +void f2() { + l1: for ( + int x = ({ + break l1; // expected-error {{'break' label does not name an enclosing loop or 'switch'}} + continue l1; // expected-error {{'continue' label does not name an enclosing loop}} + 1; + }); + int y : ({ + break l1; // expected-error {{'break' label does not name an enclosing loop or 'switch'}} + continue l1; // expected-error {{'continue' label does not name an enclosing loop}} + S(); + }).a + ) {} +} + +void f3() { + a: while (true) { + (void) []{ + break a; // expected-error {{'break' label does not name an enclosing loop or 'switch'}} + continue a; // expected-error {{'continue' label does not name an enclosing loop}} + }; + } +} |
