Aaron Ballman 1ea584377e A significant number of our tests in C accidentally use functions
without prototypes. This patch converts the function signatures to have
a prototype for the situations where the test is not specific to K&R C
declarations. e.g.,

  void func();

becomes

  void func(void);

This is the ninth batch of tests being updated (there are a
significant number of other tests left to be updated).
2022-02-13 08:03:40 -05:00

221 lines
3.6 KiB
C

// RUN: %clang_analyze_cc1 -verify %s \
// RUN: -analyzer-checker core,debug.ExprInspection
// Stuff that used to hang.
extern void __assert_fail(__const char *__assertion, __const char *__file,
unsigned int __line, __const char *__function)
__attribute__((__noreturn__));
#define assert(expr) \
((expr) ? (void)(0) : __assert_fail(#expr, __FILE__, __LINE__, __func__))
void clang_analyzer_eval(int);
int g(void);
int f(int y) {
return y + g();
}
int produce_a_very_large_symbol(int x) {
return f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(
f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(x))))))))))))))))))))))))))))))));
}
void produce_an_exponentially_exploding_symbol(int x, int y) {
x += y; y += x + g();
x += y; y += x + g();
x += y; y += x + g();
x += y; y += x + g();
x += y; y += x + g();
x += y; y += x + g();
x += y; y += x + g();
x += y; y += x + g();
x += y; y += x + g();
x += y; y += x + g();
x += y; y += x + g();
}
void produce_an_exponentially_exploding_symbol_2(int x, int y) {
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
if (x > 1) {
if (x > 2) {
if (x > 3) {
if (x > 4) {
if (x > 5) {
if (x > 6) {
if (x > 7) {
if (x > 8) {
if (x > 9) {
if (x > 10) {
}
}
}
}
}
}
}
}
}
}
}
void produce_an_exponentially_exploding_symbol_3(int x, int y) {
assert(0 < x && x < 10);
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
x &= y;
y &= x & g();
clang_analyzer_eval(0 < x && x < 10); // expected-warning{{TRUE}}
// expected-warning@-1{{FALSE}}
}