diff options
Diffstat (limited to 'gcc/testsuite/gcc.dg/analyzer/operations.c')
-rw-r--r-- | gcc/testsuite/gcc.dg/analyzer/operations.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/analyzer/operations.c b/gcc/testsuite/gcc.dg/analyzer/operations.c new file mode 100644 index 0000000..0f8aad2 --- /dev/null +++ b/gcc/testsuite/gcc.dg/analyzer/operations.c @@ -0,0 +1,44 @@ +#include "analyzer-decls.h" + +void test (int i, int j) +{ + int k, m; + + if (i > 42) { + __analyzer_eval (i > 42); /* { dg-warning "TRUE" } */ + + i += 3; + + __analyzer_eval (i > 45); /* { dg-warning "TRUE" "" { xfail *-*-* } } */ + /* { dg-warning "UNKNOWN" "" { target *-*-* } .-1 } */ + /* TODO(xfail): do we really know this? what about overflow? */ + + i -= 1; + + __analyzer_eval (i > 44); /* { dg-warning "TRUE" "" { xfail *-*-* } } */ + /* { dg-warning "UNKNOWN" "" { target *-*-* } .-1 } */ + /* TODO(xfail): do we really know this? what about overflow? */ + + i = 3 * i; + + __analyzer_eval (i > 132); /* { dg-warning "TRUE" "" { xfail *-*-* } } */ + /* { dg-warning "UNKNOWN" "" { target *-*-* } .-1 } */ + /* TODO(xfail): do we really know this? what about overflow? */ + + i /= 2; + + __analyzer_eval (i > 66); /* { dg-warning "TRUE" "" { xfail *-*-* } } */ + /* { dg-warning "UNKNOWN" "" { target *-*-* } .-1 } */ + /* TODO(xfail): do we really know this? what about overflow? */ + + /* We don't know anything about j, so we don't know anything about k: */ + k = i + j; + __analyzer_eval (k == 0); /* { dg-warning "UNKNOWN" } */ + + /* However, we should now know that m > 67: */ + m = i + 1; + __analyzer_eval (m > 67); /* { dg-warning "TRUE" "" { xfail *-*-* } } */ + /* { dg-warning "UNKNOWN" "" { target *-*-* } .-1 } */ + /* TODO(xfail): do we really know this? what about overflow? */ + } +} |