xref: /aosp_15_r20/external/clang/test/CXX/stmt.stmt/stmt.dcl/p3.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify %s
2*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify -std=c++98 %s
3*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s
4*67e74705SXin Li 
5*67e74705SXin Li // PR10034
6*67e74705SXin Li struct X {};
7*67e74705SXin Li 
exx(X)8*67e74705SXin Li void exx(X) {}
9*67e74705SXin Li 
test_ptr10034(int argc,char ** argv)10*67e74705SXin Li int test_ptr10034(int argc, char **argv)
11*67e74705SXin Li {
12*67e74705SXin Li  if (argc > 3)
13*67e74705SXin Li    goto end;
14*67e74705SXin Li 
15*67e74705SXin Li  X x;
16*67e74705SXin Li  X xs[16];
17*67e74705SXin Li  exx(x);
18*67e74705SXin Li 
19*67e74705SXin Li  end:
20*67e74705SXin Li    if (argc > 1) {
21*67e74705SXin Li    for (int i = 0; i < argc; ++i)
22*67e74705SXin Li    {
23*67e74705SXin Li 
24*67e74705SXin Li    }
25*67e74705SXin Li    }
26*67e74705SXin Li    return 0;
27*67e74705SXin Li }
28*67e74705SXin Li 
29*67e74705SXin Li struct Y {
30*67e74705SXin Li   ~Y();
31*67e74705SXin Li };
32*67e74705SXin Li 
test_Y()33*67e74705SXin Li void test_Y() {
34*67e74705SXin Li   goto end; // expected-error{{cannot jump from this goto statement to its label}}
35*67e74705SXin Li   Y y; // expected-note{{jump bypasses variable with a non-trivial destructor}}
36*67e74705SXin Li  end:
37*67e74705SXin Li   return;
38*67e74705SXin Li }
39*67e74705SXin Li 
40*67e74705SXin Li struct Z {
41*67e74705SXin Li   Z operator=(const Z&);
42*67e74705SXin Li };
43*67e74705SXin Li 
test_Z()44*67e74705SXin Li void test_Z() {
45*67e74705SXin Li   goto end;
46*67e74705SXin Li #if __cplusplus <= 199711L
47*67e74705SXin Li   // expected-error@-2 {{cannot jump from this goto statement to its label}}
48*67e74705SXin Li #endif
49*67e74705SXin Li 
50*67e74705SXin Li   Z z;
51*67e74705SXin Li #if __cplusplus <= 199711L
52*67e74705SXin Li   // expected-note@-2 {{jump bypasses initialization of non-POD variable}}
53*67e74705SXin Li #endif
54*67e74705SXin Li 
55*67e74705SXin Li  end:
56*67e74705SXin Li   return;
57*67e74705SXin Li }
58