| // { dg-do compile { target c++17 } } |
| // { dg-options "" } |
| // Test C++17 selection statements with initializer, basic use. |
| |
| extern int foo (void); |
| extern void bar (int); |
| extern int g; |
| |
| void |
| f (void) |
| { |
| if (auto p = foo (); p > 10) |
| bar (p); |
| else |
| bar (-p); |
| |
| if ((g += 2); g > 6) |
| bar (1); |
| |
| if (auto a = 9, b = foo (); a + b > 10) |
| bar (a + b); |
| else |
| bar (a - b); |
| |
| if (({ int a; 1;})) |
| bar (0); |
| |
| if (auto i = foo (); i > 6) |
| bar (0); |
| else if (i++; i > 8) |
| bar (1); |
| } |
| |
| extern void lock (void); |
| |
| void |
| f2 (int i) |
| { |
| if (lock (); i > 10) |
| ++i; |
| else |
| --i; |
| } |
| |
| void |
| f3 (int i) |
| { |
| switch (i *= 2; auto idx = i) |
| { |
| case 4: |
| bar (3); |
| break; |
| default: |
| break; |
| } |
| } |
| |
| void |
| f4 (void) |
| { |
| if constexpr (constexpr auto s = sizeof (int); s > 10) |
| foo (); |
| } |