#define NULL (void *)0
#define UCHAR_MAX (unsigned char)(~0U)
#define CHAR_MAX (char)(UCHAR_MAX & (UCHAR_MAX >> 1))
#define CHAR_MIN (char)(UCHAR_MAX & ~(UCHAR_MAX >> 1))
void clang_analyzer_eval(int);
void clang_analyzer_warnIfReached(void);
int getInt(void);
void zeroImpliesEquality(int a, int b) {
clang_analyzer_eval((a - b) == 0); if ((a - b) == 0) {
clang_analyzer_eval(b != a); clang_analyzer_eval(b == a); clang_analyzer_eval(!(a != b)); clang_analyzer_eval(!(b == a)); return;
}
clang_analyzer_eval((a - b) == 0); clang_analyzer_eval(b == a); clang_analyzer_eval(b != a); }
void zeroImpliesReversedEqual(int a, int b) {
clang_analyzer_eval((b - a) == 0); if ((b - a) == 0) {
clang_analyzer_eval(b != a); clang_analyzer_eval(b == a); return;
}
clang_analyzer_eval((b - a) == 0); clang_analyzer_eval(b == a); clang_analyzer_eval(b != a); }
void canonicalEqual(int a, int b) {
clang_analyzer_eval(a == b); if (a == b) {
clang_analyzer_eval(b == a); return;
}
clang_analyzer_eval(a == b); clang_analyzer_eval(b == a); }
void test(int a, int b, int c, int d) {
if (a == b && c == d) {
if (a == 0 && b == d) {
clang_analyzer_eval(c == 0); }
c = 10;
if (b == d) {
clang_analyzer_eval(c == 10); clang_analyzer_eval(d == 10); clang_analyzer_eval(b == a); clang_analyzer_eval(a == d);
b = getInt();
clang_analyzer_eval(a == d); clang_analyzer_eval(a == b); }
}
if (a != b && b == c) {
if (c == 42) {
clang_analyzer_eval(b == 42); clang_analyzer_eval(a != 42); }
}
}
void testIntersection(int a, int b, int c) {
if (a < 42 && b > 15 && c >= 25 && c <= 30) {
if (a != b)
return;
clang_analyzer_eval(a > 15); clang_analyzer_eval(b < 42); clang_analyzer_eval(a <= 30);
if (c == b) {
clang_analyzer_eval(a >= 25 && a <= 30); clang_analyzer_eval(b >= 25 && b <= 30); }
}
}
void testPromotion(int a, char b) {
if (b > 10) {
if (a == b) {
clang_analyzer_eval(a > 10); clang_analyzer_eval(a <= CHAR_MAX); }
}
}
void testPromotionOnlyTypes(int a, char b) {
if (a == b) {
clang_analyzer_eval(a <= CHAR_MAX); }
}
void testDowncast(int a, unsigned char b) {
if (a <= -10) {
if ((unsigned char)a == b) {
clang_analyzer_warnIfReached(); }
if (a == b) {
clang_analyzer_warnIfReached(); }
}
}
void testPointers(int *a, int *b, int *c, int *d) {
if (a == b && c == d) {
if (a == NULL && b == d) {
clang_analyzer_eval(c == NULL); }
}
if (a != b && b == c) {
if (c == NULL) {
clang_analyzer_eval(a != NULL); }
}
}
void testDisequalitiesAfter(int a, int b, int c) {
if (a >= 10 && b <= 42) {
if (a == b && c == 15 && c != a) {
clang_analyzer_eval(b != c); clang_analyzer_eval(a != 15); clang_analyzer_eval(b != 15); clang_analyzer_eval(b >= 10); clang_analyzer_eval(a <= 42); }
}
}
void testDisequalitiesBefore(int a, int b, int c) {
if (a >= 10 && b <= 42 && c == 15) {
if (a == b && c != a) {
clang_analyzer_eval(b != c); clang_analyzer_eval(a != 15); clang_analyzer_eval(b != 15); clang_analyzer_eval(b >= 10); clang_analyzer_eval(a <= 42); }
}
}
void avoidInfeasibleConstraintsForClasses(int a, int b) {
if (a >= 0 && a <= 10 && b >= 20 && b <= 50) {
if ((b - a) == 0) {
clang_analyzer_warnIfReached(); }
if (a == b) {
clang_analyzer_warnIfReached(); }
if (a != b) {
clang_analyzer_warnIfReached(); } else {
clang_analyzer_warnIfReached(); }
}
}
void avoidInfeasibleConstraintforGT(int a, int b) {
int c = b - a;
if (c <= 0)
return;
if (a != b) {
clang_analyzer_warnIfReached(); return;
}
clang_analyzer_warnIfReached(); if (c < 0)
;
}
void avoidInfeasibleConstraintforLT(int a, int b) {
int c = b - a;
if (c >= 0)
return;
if (a != b) {
clang_analyzer_warnIfReached(); return;
}
clang_analyzer_warnIfReached(); if (c < 0)
;
}
void implyDisequalityFromGT(int a, int b) {
if (a > b) {
clang_analyzer_eval(a == b); clang_analyzer_eval(a != b); }
}
void implyDisequalityFromLT(int a, int b) {
if (a < b) {
clang_analyzer_eval(a == b); clang_analyzer_eval(a != b); }
}