p3.cpp revision 14475426eb5d37f179cf80626b4a45fab6e02b6b
1e413516d0ed61ef9e2ff706bcc00480adca947c4Douglas Gregor// RUN: %clang_cc1 -fsyntax-only -verify %s 2e413516d0ed61ef9e2ff706bcc00480adca947c4Douglas Gregor 3e413516d0ed61ef9e2ff706bcc00480adca947c4Douglas Gregor// PR10034 4e413516d0ed61ef9e2ff706bcc00480adca947c4Douglas Gregorstruct X {}; 5e413516d0ed61ef9e2ff706bcc00480adca947c4Douglas Gregor 6e413516d0ed61ef9e2ff706bcc00480adca947c4Douglas Gregorvoid exx(X) {} 7e413516d0ed61ef9e2ff706bcc00480adca947c4Douglas Gregor 8f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregorint test_ptr10034(int argc, char **argv) 9e413516d0ed61ef9e2ff706bcc00480adca947c4Douglas Gregor{ 10e413516d0ed61ef9e2ff706bcc00480adca947c4Douglas Gregor if (argc > 3) 11e413516d0ed61ef9e2ff706bcc00480adca947c4Douglas Gregor goto end; 12e413516d0ed61ef9e2ff706bcc00480adca947c4Douglas Gregor 13e413516d0ed61ef9e2ff706bcc00480adca947c4Douglas Gregor X x; 14e413516d0ed61ef9e2ff706bcc00480adca947c4Douglas Gregor X xs[16]; 15e413516d0ed61ef9e2ff706bcc00480adca947c4Douglas Gregor exx(x); 16e413516d0ed61ef9e2ff706bcc00480adca947c4Douglas Gregor 17e413516d0ed61ef9e2ff706bcc00480adca947c4Douglas Gregor end: 18e413516d0ed61ef9e2ff706bcc00480adca947c4Douglas Gregor if (argc > 1) { 19e413516d0ed61ef9e2ff706bcc00480adca947c4Douglas Gregor for (int i = 0; i < argc; ++i) 20e413516d0ed61ef9e2ff706bcc00480adca947c4Douglas Gregor { 21e413516d0ed61ef9e2ff706bcc00480adca947c4Douglas Gregor 22e413516d0ed61ef9e2ff706bcc00480adca947c4Douglas Gregor } 23e413516d0ed61ef9e2ff706bcc00480adca947c4Douglas Gregor } 24e413516d0ed61ef9e2ff706bcc00480adca947c4Douglas Gregor return 0; 25e413516d0ed61ef9e2ff706bcc00480adca947c4Douglas Gregor} 26f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor 27f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregorstruct Y { 28f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor ~Y(); 29f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor}; 30f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor 31f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregorvoid test_Y() { 32f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor goto end; // expected-error{{goto into protected scope}} 3314475426eb5d37f179cf80626b4a45fab6e02b6bRichard Smith Y y; // expected-note{{jump bypasses variable with a non-trivial destructor}} 34f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor end: 35f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor return; 36f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor} 37f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor 38f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregorstruct Z { 39f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor Z operator=(const Z&); 40f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor}; 41f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor 42f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregorvoid test_Z() { 43f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor goto end; // expected-error{{goto into protected scope}} 4414475426eb5d37f179cf80626b4a45fab6e02b6bRichard Smith Z z; // expected-note{{jump bypasses initialization of non-POD variable}} 45f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor end: 46f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor return; 47f61103ef335fb273a98c1389e6fddaf796feb4b3Douglas Gregor} 48