extern void abort(void); #include void reach_error() { assert(0); } extern unsigned int __VERIFIER_nondet_uint(); #include #define assert_nl(e) { if(!(e)) { goto ERROR; } } #undef assert #define assert(e) { if(!(e)) { ERROR: {reach_error();abort();}(void)0; } } void* thr1(void* arg){ unsigned int x=__VERIFIER_nondet_uint(), y=__VERIFIER_nondet_uint(), z=__VERIFIER_nondet_uint(); int i, j=1, k=1; for(i=0; i i); } } } assert(i == x && (/* uncomment to make error go away: x == 0 ||*/ j == y || y <= x+1) && (x == 0 || y <= x+1 || k == z || z < y)) ; return 0; } int main() { pthread_t t; while(1) { pthread_create(&t, 0, thr1, 0); } }