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