diff options
Diffstat (limited to 'gcc/testsuite/c-c++-common/pr66322.c')
-rw-r--r-- | gcc/testsuite/c-c++-common/pr66322.c | 144 |
1 files changed, 144 insertions, 0 deletions
diff --git a/gcc/testsuite/c-c++-common/pr66322.c b/gcc/testsuite/c-c++-common/pr66322.c new file mode 100644 index 00000000000..eb1e9e4a2ed --- /dev/null +++ b/gcc/testsuite/c-c++-common/pr66322.c @@ -0,0 +1,144 @@ +/* PR c/66322 */ +/* { dg-do compile } */ + +#ifndef __cplusplus +# define bool _Bool +# define true 1 +# define false 0 +#endif + +void +nowarn (bool b) +{ + switch (b) + ; + + switch (b) + { + case true: + case false: + break; + } + + switch (b) + { + case true: + break; + } + + switch (b) + { + case true: + default: + break; + } + + switch (b) + { + case false: + break; + } + + switch (b) + { + case false: + default: + break; + } + + switch (b) + { + default: + break; + } + + switch (b) + { + case false ... true: + break; + } + + switch (b) + { + case 1: + switch (b) + { + case true: + default: + break; + } + default: + break; + } +} + +void +warn (bool b) +{ + switch (b) /* { dg-warning "switch condition has" } */ + { + case true: + case false: + default: + break; + } + + switch (b) /* { dg-warning "switch condition has" } */ + { + case false ... true: + default: + break; + } +} + +void +warn2 (int n) +{ + switch (n == 2) /* { dg-warning "switch condition has" } */ + { + case 0 ... 2: /* { dg-warning "upper value" "" { target c++ } } */ + default: + break; + } + + switch (n == 2) /* { dg-warning "switch condition has" } */ + { + case 1 ... 10: /* { dg-warning "upper value" "" { target c++ } } */ + default: + break; + } + + switch (n == 2) /* { dg-warning "switch condition has" } */ + { + case 2: /* { dg-warning "case label" "" { target c++ } } */ + break; + } + + switch (n == 2) /* { dg-warning "switch condition has" } */ + { + case 0: + case 1: + case -1: /* { dg-warning "case label" "" { target c++ } } */ + break; + } + + switch (n == 2) /* { dg-warning "switch condition has" } */ + { + case -1 ... 1: /* { dg-warning "lower value" "" { target c++ } } */ + break; + } + + switch (n == 2) /* { dg-warning "switch condition has" } */ + { + case -1 ... 0: /* { dg-warning "lower value" "" { target c++ } } */ + default: + break; + } + + switch (n == 2) /* { dg-warning "switch condition has" } */ + { + case -10 ... -1: /* { dg-warning "case label" "" { target c++ } } */ + default: + break; + } +} |