1762bb9d0ad20320b9f97a841dce57ba5e8e48b07Richard Smith// RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify %s
2f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor
3f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor// PR10034
4f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregorstruct X {};
5f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor
6f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregorvoid exx(X) {}
7f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor
8f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregorint test_ptr10034(int argc, char **argv)
9f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor{
10f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor if (argc > 3)
11f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor   goto end;
12f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor
13f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor X x;
14f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor X xs[16];
15f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor exx(x);
16f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor
17f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor end:
18f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor   if (argc > 1) {
19f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor   for (int i = 0; i < argc; ++i)
20f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor   {
21f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor
22f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor   }
23f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor   }
24f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor   return 0;
25f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor}
26f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor
27f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregorstruct Y {
28f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor  ~Y();
29f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor};
30f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor
31f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregorvoid f();
32f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregorvoid test_Y() {
33176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  goto end; // expected-error{{cannot jump from this goto statement to its label}}
341454cb952b76a7dc441f2ae1b7f8d998a54a23cfDouglas Gregor  Y y; // expected-note{{jump bypasses variable with a non-trivial destructor}}
35f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor end:
36f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor  f();
37176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  goto inner; // expected-error{{cannot jump from this goto statement to its label}}
38f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor  {
391454cb952b76a7dc441f2ae1b7f8d998a54a23cfDouglas Gregor    Y y2; // expected-note{{jump bypasses variable with a non-trivial destructor}}
40f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor  inner:
41f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor    f();
42f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor  }
43f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor  return;
44f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor}
45f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor
46f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregorstruct Z {
47f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor  Z operator=(const Z&);
48f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor};
49f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor
50f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregorvoid test_Z() {
51f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor  goto end;
52f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor  Z z;
53f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor end:
54f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor  return;
55f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor}
56