brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.9 KiB · b80305f Raw
128 lines · cpp
1// RUN: %clang_cc1 -fsyntax-only -verify -Wall -Wno-unused-but-set-variable -fblocks %s2 3// PR94634double *end;5void f(bool b1, bool b2) {6  {7    do {8      int end = 0;9      if (b2) {10        do {11          goto end;12        } while (b2);13      }14      end = 1;15    } while (b1);16  }17 18 end:19  return;20}21 22namespace N {23  float* end;24  void f(bool b1, bool b2) {25    {26      do {27        int end = 0;28        if (b2) {29          do {30            goto end;31          } while (b2);32        }33        end = 1;34      } while (b1);35    }36 37  end:38    return;39  }40}41 42void g() {43  end = 1; // expected-error{{incompatible integer to pointer conversion assigning to 'double *' from 'int'}}44}45 46void h(int end) {47  {48    goto end; // expected-error{{use of undeclared label 'end'}}49  }50}51 52void h2(int end) {53  {54    __label__ end;55    goto end;56 57  end:58    ::end = 0;59  }60 end: // expected-warning{{unused label 'end'}}61  end = 1;62}63 64class X {65public:66  X();67};68 69void rdar9135994()70{71X:  72    goto X;73}74 75namespace PR9495 {76  struct NonPOD { NonPOD(); ~NonPOD(); };  77  78  void f(bool b) {79    NonPOD np;80    if (b) {81      goto undeclared; // expected-error{{use of undeclared label 'undeclared'}}82    }83  }84 85  void g() {86    (void)^(bool b){87      NonPOD np;88      if (b) {89        goto undeclared; // expected-error{{use of undeclared label 'undeclared'}}90      }91    };92  }93}94 95extern "C" {96  void exit(int);97}98 99void f() {100  {101    goto exit;102  }103 exit:104  return;105}106 107namespace PR10620 {108  struct S {109    ~S() {}110  };111  void g(const S& s) {112    goto done; // expected-error {{cannot jump}}113    const S s2(s); // expected-note {{jump bypasses variable initialization}}114  done:115    ;116  }117}118 119namespace test12 {120  struct A { A(); A(const A&); ~A(); };121  void test(A a) { // expected-note {{jump enters lifetime of block}} FIXME: weird location122    goto lbl; // expected-error {{cannot jump}}123    (void) ^{ (void) a; };124  lbl:125    return;126  }127}128