// 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}} }