brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.9 KiB · fd907e7 Raw
86 lines · c
1// RUN: %clang_cc1 -fsyntax-only -verify %s -fblocks2 3void test_gotos(void) {4  goto L1; // expected-error {{use of undeclared label 'L1'}}5  goto L3; // OK6  #pragma clang __debug captured7  {8L1:9    goto L2; // OK10L2:11    goto L3; // expected-error {{use of undeclared label 'L3'}}12  }13L3: ;14}15 16void test_break_continue(void) {17  while (1) {18    #pragma clang __debug captured19    {20      break; // expected-error {{'break' statement not in loop or switch statement}}21      continue; // expected-error {{'continue' statement not in loop statement}}22    }23  }24}25 26void test_return(void) {27  while (1) {28    #pragma clang __debug captured29    {30      return; // expected-error {{cannot return from default captured statement}}31    }32  }33}34 35void test_nest(void) {36  int x;37  #pragma clang __debug captured38  {39    int y;40    #pragma clang __debug captured41    {42      int z;43      #pragma clang __debug captured44      {45        x = z = y; // OK46      }47    }48  }49}50 51void test_nest_block(void) {52  __block int x; // expected-note {{'x' declared here}}53  int y;54  ^{55    int z;56    #pragma clang __debug captured57    {58      x = y; // expected-error{{__block variable 'x' cannot be captured in a captured statement}}59      y = z; // expected-error{{variable is not assignable (missing __block type specifier)}}60      z = y; // OK61    }62  }();63 64  __block int a; // expected-note 2 {{'a' declared here}}65  int b;66  #pragma clang __debug captured67  {68    int d;69    ^{70      a = b; // expected-error{{__block variable 'a' cannot be captured in a captured statement}}71      a = b; // (duplicate diagnostic suppressed)72      b = d; // OK - Consistent with block inside a lambda73    }();74  }75  #pragma clang __debug captured76  {77    __block int c;78    int d;79    ^{80      c = a; // expected-error{{__block variable 'a' cannot be captured in a captured statement}}81      c = d; // OK82      d = b; // expected-error{{variable is not assignable (missing __block type specifier)}}83    }();84  }85}86