| // RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify %s |
| |
| // PR10034 |
| struct X {}; |
| |
| void exx(X) {} |
| |
| int test_ptr10034(int argc, char **argv) |
| { |
| if (argc > 3) |
| goto end; |
| |
| X x; |
| X xs[16]; |
| exx(x); |
| |
| end: |
| if (argc > 1) { |
| for (int i = 0; i < argc; ++i) |
| { |
| |
| } |
| } |
| return 0; |
| } |
| |
| struct Y { |
| ~Y(); |
| }; |
| |
| void f(); |
| void test_Y() { |
| goto end; // expected-error{{cannot jump from this goto statement to its label}} |
| Y y; // expected-note{{jump bypasses variable with a non-trivial destructor}} |
| end: |
| f(); |
| goto inner; // expected-error{{cannot jump from this goto statement to its label}} |
| { |
| Y y2; // expected-note{{jump bypasses variable with a non-trivial destructor}} |
| inner: |
| f(); |
| } |
| return; |
| } |
| |
| struct Z { |
| Z operator=(const Z&); |
| }; |
| |
| void test_Z() { |
| goto end; |
| Z z; |
| end: |
| return; |
| } |