blob: f032789e6c4ab8f3000a1611d4892b12bae1dc9a [file] [log] [blame]
/* { dg-additional-options "-fanalyzer-transitivity" } */
#include "analyzer-decls.h"
void test (int i, int j)
{
if (i > 4)
{
__analyzer_eval (i > 4); /* { dg-warning "TRUE" } */
__analyzer_eval (i <= 4); /* { dg-warning "FALSE" } */
__analyzer_eval (i > 3); /* { dg-warning "TRUE" } */
__analyzer_eval (i > 5); /* { dg-warning "UNKNOWN" } */
__analyzer_eval (i != 3); /* { dg-warning "TRUE" } */
__analyzer_eval (i == 3); /* { dg-warning "FALSE" } */
__analyzer_eval (i != 4); /* { dg-warning "TRUE" } */
__analyzer_eval (i == 4); /* { dg-warning "FALSE" } */
__analyzer_eval (i == 5); /* { dg-warning "UNKNOWN" } */
__analyzer_eval (i != 5); /* { dg-warning "UNKNOWN" } */
__analyzer_eval (i < 5); /* { dg-warning "FALSE" } */
__analyzer_eval (i <= 5); /* { dg-warning "UNKNOWN" } */
/* Tests of transitivity. */
if (j < i)
{
__analyzer_eval (j < i); /* { dg-warning "TRUE" } */
__analyzer_eval (j <= 4); /* { dg-warning "UNKNOWN" } */
}
else
{
__analyzer_eval (j >= i); /* { dg-warning "TRUE" } */
__analyzer_eval (j > 4); /* { dg-warning "TRUE" } */
}
}
else
{
__analyzer_eval (i > 4); /* { dg-warning "FALSE" } */
__analyzer_eval (i <= 4); /* { dg-warning "TRUE" } */
__analyzer_eval (i > 3); /* { dg-warning "UNKNOWN" } */
__analyzer_eval (i > 5); /* { dg-warning "FALSE" } */
__analyzer_eval (i != 3); /* { dg-warning "UNKNOWN" } */
__analyzer_eval (i == 3); /* { dg-warning "UNKNOWN" } */
__analyzer_eval (i != 4); /* { dg-warning "UNKNOWN" } */
__analyzer_eval (i == 4); /* { dg-warning "UNKNOWN" } */
__analyzer_eval (i == 5); /* { dg-warning "FALSE" } */
__analyzer_eval (i != 5); /* { dg-warning "TRUE" } */
__analyzer_eval (i < 5); /* { dg-warning "TRUE" } */
__analyzer_eval (i <= 5); /* { dg-warning "TRUE" } */
}
}
void test_2 (int i, int j, int k)
{
if (i >= j)
{
__analyzer_eval (i == k); /* { dg-warning "UNKNOWN" } */
if (j >= k)
{
__analyzer_eval (i >= k); /* { dg-warning "TRUE" } */
__analyzer_eval (i == k); /* { dg-warning "UNKNOWN" } */
if (k >= i)
__analyzer_eval (i == k); /* { dg-warning "TRUE" } */
}
}
}
void test_3 (int flag, unsigned int i)
{
if (!flag) {
return;
}
__analyzer_eval (flag); /* { dg-warning "TRUE" } */
if (i>0) {
__analyzer_eval (i > 0); /* { dg-warning "TRUE" } */
__analyzer_eval (flag); /* { dg-warning "TRUE" } */
} else {
__analyzer_eval (i <= 0); /* { dg-warning "TRUE" } */
__analyzer_eval (flag); /* { dg-warning "TRUE" } */
}
__analyzer_eval (flag); /* { dg-warning "TRUE" } */
}
void test_range_int_gt_lt (int i)
{
if (i > 3)
if (i < 5)
__analyzer_eval (i == 4); /* { dg-warning "TRUE" } */
}
void test_range_float_gt_lt (float f)
{
if (f > 3)
if (f < 5)
__analyzer_eval (f == 4); /* { dg-warning "UNKNOWN" } */
}
void test_range_int_ge_lt (int i)
{
if (i >= 4)
if (i < 5)
__analyzer_eval (i == 4); /* { dg-warning "TRUE" } */
}
void test_range_float_ge_lt (float f)
{
if (f >= 4)
if (f < 5)
__analyzer_eval (f == 4); /* { dg-warning "UNKNOWN" } */
}
void test_range_int_gt_le (int i)
{
if (i > 3)
if (i <= 4)
__analyzer_eval (i == 4); /* { dg-warning "TRUE" } */
}
void test_range_float_gt_le (float f)
{
if (f > 3)
if (f <= 4)
__analyzer_eval (f == 4); /* { dg-warning "UNKNOWN" } */
}
void test_range_int_ge_le (int i)
{
if (i >= 4)
if (i <= 4)
__analyzer_eval (i == 4); /* { dg-warning "TRUE" } */
}
void test_range_float_ge_le (float f)
{
if (f >= 4)
if (f <= 4)
__analyzer_eval (f == 4); /* { dg-warning "TRUE" "PR 93356" { xfail *-*-* } } */
/* { dg-warning "UNKNOWN" "disabled float comparisons" { target *-*-* } .-1 } */
}
void test_float_selfcmp (float f)
{
__analyzer_eval (f == f); /* { dg-warning "UNKNOWN" } */
__analyzer_eval (f != f); /* { dg-warning "UNKNOWN" } */
}