| // { dg-do run } |
| // Positive testcase for decls in conditions. |
| |
| extern "C" int printf(const char *, ...); |
| |
| int up = 0; |
| int down = 0; |
| |
| struct T |
| { |
| int i; |
| T(int j) { i = j; printf("UP\n"); up++; } |
| T(const T& t) { i = t.i; printf("unwanted copy\n"); } |
| ~T() { printf ("DOWN\n"); down++; } |
| operator int () { return i; } |
| }; |
| |
| int main () |
| { |
| int t; |
| |
| if (T t = 1) |
| ; |
| |
| printf ("\n"); |
| |
| int j = 3; |
| while (T t = j--) |
| ; |
| |
| printf ("\n"); |
| |
| j = 3; |
| while (1) |
| { |
| T t = j--; |
| if (t) continue; |
| break; |
| } |
| |
| printf ("\n"); |
| |
| j = 3; |
| for (;T t = j--;) |
| ; |
| |
| printf ("\n"); |
| |
| for (int k = 3; T t = k--;) |
| ; |
| |
| printf ("\n"); |
| |
| switch (T t = 34) |
| { |
| case 34: |
| ; |
| } |
| |
| printf ("\n"); |
| |
| if (up == down && up == 18) |
| return 0; |
| else |
| return 1; |
| } |