| /* { dg-additional-options "-fanalyzer-transitivity" } */ |
| |
| #include "analyzer-decls.h" |
| |
| void test (int i) |
| { |
| switch (i) |
| { |
| case 0: |
| __analyzer_eval (i == 0); /* { dg-warning "TRUE" } */ |
| break; |
| |
| case 3 ... 5: |
| __analyzer_eval (i >= 3); /* { dg-warning "TRUE" } */ |
| __analyzer_eval (i <= 5); /* { dg-warning "TRUE" } */ |
| break; |
| |
| default: |
| __analyzer_eval (i == 0); /* { dg-warning "FALSE" } */ |
| __analyzer_eval (i == 2); /* { dg-warning "UNKNOWN" } */ |
| __analyzer_eval (i == 3); /* { dg-warning "FALSE" } */ |
| __analyzer_eval (i == 4); /* { dg-warning "FALSE" "desired" { xfail *-*-* } } */ |
| /* { dg-warning "UNKNOWN" "status quo" { target *-*-* } .-1 } */ |
| /* TODO(xfail^^^): we're only checking against endpoints of case |
| ranges, not the insides. */ |
| __analyzer_eval (i == 5); /* { dg-warning "FALSE" } */ |
| __analyzer_eval (i == 6); /* { dg-warning "UNKNOWN" } */ |
| break; |
| } |
| } |