1// { dg-do run  }
2// Positive testcase for decls in conditions.
3
4extern "C" int printf(const char *, ...);
5
6int up = 0;
7int down = 0;
8
9struct T
10{
11  int i;
12  T(int j) { i = j; printf("UP\n"); up++; }
13  T(const T& t) { i = t.i; printf("unwanted copy\n"); }
14  ~T() { printf ("DOWN\n"); down++; }
15  operator int () { return i; }
16};
17
18int main ()
19{
20  int t;
21
22  if (T t = 1)
23    ;
24
25  printf ("\n");
26
27  int j = 3;
28  while (T t = j--)
29    ;
30
31  printf ("\n");
32
33  j = 3;
34  while (1)
35    {
36      T t = j--;
37      if (t) continue;
38      break;
39    }
40
41  printf ("\n");
42
43  j = 3;
44  for (;T t = j--;)
45    ;
46
47  printf ("\n");
48
49  for (int k = 3; T t = k--;)
50    ;
51
52  printf ("\n");
53
54  switch (T t = 34)
55    {
56    case 34:
57      ;
58    }
59
60  printf ("\n");
61
62  if (up == down && up == 18)
63    return 0;
64  else
65    return 1;
66}
67