| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- // RUN: %clang_cc1 -fsyntax-only -verify %s -fblocks
- void test_gotos() {
- goto L1; // expected-error {{use of undeclared label 'L1'}}
- goto L3; // OK
- #pragma clang __debug captured
- {
- L1:
- goto L2; // OK
- L2:
- goto L3; // expected-error {{use of undeclared label 'L3'}}
- }
- L3: ;
- }
- void test_break_continue() {
- while (1) {
- #pragma clang __debug captured
- {
- break; // expected-error {{'break' statement not in loop or switch statement}}
- continue; // expected-error {{'continue' statement not in loop statement}}
- }
- }
- }
- void test_return() {
- while (1) {
- #pragma clang __debug captured
- {
- return; // expected-error {{cannot return from default captured statement}}
- }
- }
- }
- void test_nest() {
- int x;
- #pragma clang __debug captured
- {
- int y;
- #pragma clang __debug captured
- {
- int z;
- #pragma clang __debug captured
- {
- x = z = y; // OK
- }
- }
- }
- }
- void test_nest_block() {
- __block int x; // expected-note {{'x' declared here}}
- int y;
- ^{
- int z;
- #pragma clang __debug captured
- {
- x = y; // expected-error{{__block variable 'x' cannot be captured in a captured statement}}
- y = z; // expected-error{{variable is not assignable (missing __block type specifier)}}
- z = y; // OK
- }
- }();
- __block int a; // expected-note 2 {{'a' declared here}}
- int b;
- #pragma clang __debug captured
- {
- __block int c;
- int d;
- ^{
- a = b; // expected-error{{__block variable 'a' cannot be captured in a captured statement}}
- b = d; // OK - Consistent with block inside a lambda
- c = a; // expected-error{{__block variable 'a' cannot be captured in a captured statement}}
- c = d; // OK
- d = b; // expected-error{{variable is not assignable (missing __block type specifier)}}
- }();
- }
- }
|