[ 0:00] compiling /var/obj/divine-nightly/semidbg/test/_expand/svcomp/recursion/gcd02_true.pkg.c/small.5.c [ 0:00] compiling /dios/lib/config/seqklee.bc [ 0:00] setting up pass: functionmeta, options = [ 0:02] setting up pass: fuse-ctors, options = [ 0:02] KLEE: output directory is "/var/obj/divine-nightly/semidbg/test/__test_work_dir.18/_klee_out" [ 0:03] KLEE: Using Z3 solver backend [ 0:03] WARNING: this target does not support the llvm.stacksave intrinsic. [ 0:03] warning: Linking two modules of different target triples: klee_div_zero_check.bc' is 'x86_64-unknown-linux-gnu' whereas 'klee.bc' is 'x86_64-unknown-none-elf' [ 0:04] [ 0:04] KLEE: WARNING: undefined reference to function: __dios_tainted_init [ 0:05] KLEE: WARNING: undefined reference to function: klee_free [ 0:05] KLEE: WARNING: undefined reference to function: klee_malloc [ 0:05] i:1 [ 0:06] KLEE: WARNING ONCE: Alignment of memory from call "klee_malloc" is not modelled. Using alignment of 8. [ 0:06] about to __boot:0 [ 0:06] about to run the scheduler:0 [ 0:06] KLEE: WARNING ONCE: calling external: __dios_tainted_init() at /dios/libc/sys/start.cpp:49 5 [ 0:06] KLEE: ERROR: /dios/libc/sys/start.cpp:87: failed external call: __dios_tainted_init [ 0:06] KLEE: NOTE: now ignoring this error at this location [ 0:06] KLEE: ERROR: EXITING ON ERROR: [ 0:06] Error: failed external call: __dios_tainted_init [ 0:06] File: /dios/libc/sys/start.cpp [ 0:06] Line: 87 [ 0:06] assembly.ll line: 34198 [ 0:06] Stack: [ 0:06] #000034198 in __dios_start (l=0, argc=1, argv=94857873592840, envp=94857873678344) at /dios/libc/sys/start.cpp:87 [ 0:06] #100010217 in _ZN6__dios10sched_nullINS_5ClockINS_10NondetKleeINS_4BaseEEEEEE13run_schedulerINS_7ContextEEEvv () at /dios/sys/sched_null.hpp:163 [ 0:06] #200042548 in klee_boot (argc=2, argv=94857848560384) at /dios/arch/klee/boot.c:41 [ 0:06] [ 0:06] [ 0:06] 1 /* TAGS: c sym */ [ 0:06] 2 /* VERIFY_OPTS: --symbolic --sequential -o nofail:malloc */ [ 0:06] 3 /* CC_OPTS: -DNUM=5 */ [ 0:06] 4 [ 0:06] 5 extern void __VERIFIER_error() __attribute__ ((__noreturn__)); [ 0:06] 6 [ 0:06] 7 /* [ 0:06] 8 * Recursive implementation of the greatest common denominator [ 0:06] 9 * using Euclid's algorithm [ 0:06] 10 * [ 0:06] 11 * Author: Jan Leike [ 0:06] 12 * Date: 2013-07-17 [ 0:06] 13 * [ 0:06] 14 */ [ 0:06] 15 [ 0:06] 16 // V: small.5 CC_OPT: -DNUM=5 [ 0:06] 17 // V: big.10 CC_OPT: -DNUM=10 TAGS: big [ 0:06] 18 // V: big.100 CC_OPT: -DNUM=100 TAGS: big [ 0:06] 19 // V: big.1000 CC_OPT: -DNUM=1000 TAGS: big [ 0:06] 20 // V: big.2147483647 CC_OPT: -DNUM=2147483647 TAGS: big [ 0:06] 21 [ 0:06] 22 extern int __VERIFIER_nondet_int(void); [ 0:06] 23 [ 0:06] 24 // Compute the greatest common denominator using Euclid's algorithm [ 0:06] 25 int gcd(int y1, int y2) { [ 0:06] 26 if (y1 <= 0 || y2 <= 0) { [ 0:06] 27 // No non-positive input allowed [ 0:06] 28 ERROR: __VERIFIER_error(); [ 0:06] 29 } [ 0:06] 30 if (y1 == y2) { [ 0:06] 31 return y1; [ 0:06] 32 } [ 0:06] 33 if (y1 > y2) { [ 0:06] 34 return gcd(y1 - y2, y2); [ 0:06] 35 } [ 0:06] 36 return gcd(y1, y2 - y1); [ 0:06] 37 } [ 0:06] 38 [ 0:06] 39 // does n divide m? [ 0:06] 40 int divides(int n, int m) { [ 0:06] 41 if (m == 0) { [ 0:06] 42 return 1; // true [ 0:06] 43 } [ 0:06] 44 if (n > m) { [ 0:06] 45 return 0; // false [ 0:06] 46 } [ 0:06] 47 return divides(n, m - n); [ 0:06] 48 } [ 0:06] 49 [ 0:06] 50 int main() { [ 0:06] 51 int m = __VERIFIER_nondet_int(); [ 0:06] 52 if (m <= 0 || m > NUM) { [ 0:06] 53 return 0; [ 0:06] 54 } [ 0:06] 55 int n = __VERIFIER_nondet_int(); [ 0:06] 56 if (n <= 0 || n > NUM) { [ 0:06] 57 return 0; [ 0:06] 58 } [ 0:06] 59 if (m > 0 && n > 0) { [ 0:06] 60 int z = gcd(m, n); [ 0:06] 61 if (divides(z, m) == 0) { [ 0:06] 62 ERROR: __VERIFIER_error(); [ 0:06] 63 } else { [ 0:06] 64 return 0; [ 0:06] 65 } [ 0:06] 66 } [ 0:06] 67 } [ 0:06] # no errors were expected but one was found anyway