| /* C2Y N3370 - Case range expressions. */ |
| /* { dg-do compile } */ |
| /* { dg-options "-std=c2y -pedantic -W -Wall -Wc23-c2y-compat" } */ |
| |
| enum E { F = 10, G = 20 }; |
| |
| void |
| foo (unsigned x) |
| { |
| switch (x) |
| { |
| case -1: |
| break; |
| case ~0U + 1ULL: /* { dg-warning "conversion from 'long long unsigned int' to 'unsigned int' changes value from '\[0-9]*' to '0'" } */ |
| break; |
| default: |
| break; |
| } |
| } |
| |
| void |
| bar (unsigned x) |
| { |
| switch (x) |
| { |
| case -2 ... -1: /* { dg-warning "ISO C does not support range expressions in switch statements before C2Y" } */ |
| /* { dg-warning "conversion of '-2' to 'unsigned int' in range expression changes value to '\[0-9]*'" "" { target *-*-* } .-1 } */ |
| /* { dg-warning "conversion of '-1' to 'unsigned int' in range expression changes value to '\[0-9]*'" "" { target *-*-* } .-2 } */ |
| break; |
| case ~0U + 1ULL ... ~0U + 2ULL: /* { dg-warning "ISO C does not support range expressions in switch statements before C2Y" } */ |
| /* { dg-warning "conversion of '\[0-9]*' to 'unsigned int' in range expression changes value to '0'" "" { target *-*-* } .-1 } */ |
| /* { dg-warning "conversion of '\[0-9]*' to 'unsigned int' in range expression changes value to '1'" "" { target *-*-* } .-2 } */ |
| break; |
| case 70 ... 70: /* { dg-warning "ISO C does not support range expressions in switch statements before C2Y" } */ |
| break; |
| case 80 ... 78: /* { dg-warning "ISO C does not support range expressions in switch statements before C2Y" } */ |
| /* { dg-warning "empty range specified" "" { target *-*-* } .-1 } */ |
| break; |
| case -4 ... -4: /* { dg-warning "ISO C does not support range expressions in switch statements before C2Y" } */ |
| /* { dg-warning "conversion of '-4' to 'unsigned int' in range expression changes value to '\[0-9]*'" "" { target *-*-* } .-1 } */ |
| break; |
| case ~0U + 6ULL ... ~0U + 6ULL: /* { dg-warning "ISO C does not support range expressions in switch statements before C2Y" } */ |
| /* { dg-warning "conversion of '\[0-9]*' to 'unsigned int' in range expression changes value to '5'" "" { target *-*-* } .-1 } */ |
| break; |
| default: |
| break; |
| } |
| } |
| |
| void |
| baz (unsigned char x) |
| { |
| switch (x) |
| { |
| case -32 ... -30: /* { dg-warning "ISO C does not support range expressions in switch statements before C2Y" } */ |
| /* { dg-warning "case label value is less than minimum value for type" "" { target *-*-* } .-1 } */ |
| break; |
| case -31: /* { dg-error "duplicate case value" } */ |
| break; |
| case -42: /* { dg-warning "case label value is less than minimum value for type" } */ |
| break; |
| case -43 ... -41: /* { dg-warning "ISO C does not support range expressions in switch statements before C2Y" } */ |
| /* { dg-error "duplicate \\\(or overlapping\\\) case value" "" { target *-*-* } .-1 } */ |
| break; |
| default: |
| break; |
| } |
| } |
| |
| void |
| qux (int x) |
| { |
| switch (x) |
| { |
| case -6 ... -8: /* { dg-warning "ISO C does not support range expressions in switch statements before C2Y" } */ |
| /* { dg-warning "empty range specified" "" { target *-*-* } .-1 } */ |
| break; |
| case -6: |
| break; |
| case -7: |
| break; |
| case -8: |
| break; |
| case F...G: /* { dg-warning "ISO C does not support range expressions in switch statements before C2Y" } */ |
| break; |
| case -10: |
| break; |
| case -10 ... -11: /* { dg-warning "ISO C does not support range expressions in switch statements before C2Y" } */ |
| /* { dg-warning "empty range specified" "" { target *-*-* } .-1 } */ |
| break; |
| case -14 ... -15: /* { dg-warning "ISO C does not support range expressions in switch statements before C2Y" } */ |
| /* { dg-warning "empty range specified" "" { target *-*-* } .-1 } */ |
| break; |
| case -14 ... -15: /* { dg-warning "ISO C does not support range expressions in switch statements before C2Y" } */ |
| /* { dg-warning "empty range specified" "" { target *-*-* } .-1 } */ |
| break; |
| default: |
| break; |
| } |
| } |