microbench.js/goabi0: date_parse failure
``` jnml@e5-1650:~/src/modernc.org/qbecc/lib$ go test -v -timeout 24h -short -run Quick -keep |& tee log === RUN TestQuickJS mkdir -p .obj .obj/examples .obj/tests qbecc -g -Wall -MMD -MF .obj/qjs.o.d -Wno-array-bounds -Wno-format-truncation -Wno-infinite-recursion -fwrapv -D_GNU_SOURCE -DCONFIG_VERSION=\"2025-09-13\" -O2 -c -o .obj/qjs.o qjs.c qbecc -g -Wall -MMD -MF .obj/qjsc.o.d -Wno-array-bounds -Wno-format-truncation -Wno-infinite-recursion -fwrapv -D_GNU_SOURCE -DCONFIG_VERSION=\"2025-09-13\" -DCONFIG_CC=\"qbecc\" -DCONFIG_PREFIX=\"/usr/local\" -O2 -c -o .obj/qjsc.o qjsc.c qbecc -g -Wall -MMD -MF .obj/quickjs.o.d -Wno-array-bounds -Wno-format-truncation -Wno-infinite-recursion -fwrapv -D_GNU_SOURCE -DCONFIG_VERSION=\"2025-09-13\" -O2 -c -o .obj/quickjs.o quickjs.c qbecc -g -Wall -MMD -MF .obj/dtoa.o.d -Wno-array-bounds -Wno-format-truncation -Wno-infinite-recursion -fwrapv -D_GNU_SOURCE -DCONFIG_VERSION=\"2025-09-13\" -O2 -c -o .obj/dtoa.o dtoa.c qbecc -g -Wall -MMD -MF .obj/libregexp.o.d -Wno-array-bounds -Wno-format-truncation -Wno-infinite-recursion -fwrapv -D_GNU_SOURCE -DCONFIG_VERSION=\"2025-09-13\" -O2 -c -o .obj/libregexp.o libregexp.c qbecc -g -Wall -MMD -MF .obj/libunicode.o.d -Wno-array-bounds -Wno-format-truncation -Wno-infinite-recursion -fwrapv -D_GNU_SOURCE -DCONFIG_VERSION=\"2025-09-13\" -O2 -c -o .obj/libunicode.o libunicode.c qbecc -g -Wall -MMD -MF .obj/cutils.o.d -Wno-array-bounds -Wno-format-truncation -Wno-infinite-recursion -fwrapv -D_GNU_SOURCE -DCONFIG_VERSION=\"2025-09-13\" -O2 -c -o .obj/cutils.o cutils.c qbecc -g -Wall -MMD -MF .obj/quickjs-libc.o.d -Wno-array-bounds -Wno-format-truncation -Wno-infinite-recursion -fwrapv -D_GNU_SOURCE -DCONFIG_VERSION=\"2025-09-13\" -O2 -c -o .obj/quickjs-libc.o quickjs-libc.c qbecc -g -o qjsc .obj/qjsc.o .obj/quickjs.o .obj/dtoa.o .obj/libregexp.o .obj/libunicode.o .obj/cutils.o .obj/quickjs-libc.o -lm -lpthread -ldl ./qjsc -s -c -o repl.c -m repl.js qbecc -g -Wall -MMD -MF .obj/repl.o.d -Wno-array-bounds -Wno-format-truncation -Wno-infinite-recursion -fwrapv -D_GNU_SOURCE -DCONFIG_VERSION=\"2025-09-13\" -O2 -c -o .obj/repl.o repl.c qbecc -g -rdynamic -o qjs .obj/qjs.o .obj/repl.o .obj/quickjs.o .obj/dtoa.o .obj/libregexp.o .obj/libunicode.o .obj/cutils.o .obj/quickjs-libc.o -lm -lpthread -ldl TEST N TIME (ns) REF (ns) SCORE (1000) empty_loop 20000 120.58 empty_down_loop 20000 128.99 empty_down_loop2 20000 164.54 empty_do_loop 20000 130.65 date_now 2000 1074.87 date_parse 100 3791.95 prop_read 5000 141.62 prop_write 10000 96.60 prop_update 5000 168.25 prop_create 500 306.73 prop_clone 500 327.52 prop_delete 200 594.49 array_read 2000 123.56 array_write 5000 93.76 array_prop_create 20 187.56 array_slice 20 126.20 array_length_decr 5 456.17 array_hole_length_decr 5 555.45 array_push 10 621.43 array_pop 5 805.50 typed_array_read 2000 129.70 typed_array_write 5000 95.53 global_read 5000 125.00 global_write 5000 123.60 global_write_strict 5000 123.64 local_destruct 200 1031.97 global_destruct 500 775.42 global_destruct_strict 500 775.25 global_func_call 2000 371.02 func_call 2000 323.20 func_closure_call 2000 325.71 int_arith 10 220.63 float_arith 10 246.82 map_set_string 1 2064.74 map_set_int 2 1065.44 map_set_bigint 2 1701.42 map_delete 1 2142.96 weak_map_set 1 2077.66 weak_map_delete 1 2413.32 array_for 100 214.70 array_for_in 50 487.11 array_for_of 100 251.47 math_min 5 446.86 regexp_ascii 1 3694.57 regexp_utf16 1 3822.52 string_build1 20 176.17 string_build1x 20 176.15 string_build2c 20 190.62 string_build2 10 302.19 string_build3 10 351.73 string_build4 10 329.00 string_build_large1 1 356.25 string_build_large2 1 403.26 int_to_string 5000 323.58 int_toString 2000 541.19 float_to_string 1000 1112.02 float_toString 500 1576.85 float_toFixed 1000 1167.27 float_toPrecision 1000 1321.83 float_toExponential 1000 1249.85 string_to_int 5000 574.60 string_to_float 5000 669.92 bigint32_arith 10 373.08 bigint64_arith 5 481.64 bigint256_arith 5 726.15 sort_bench 1 60.20 total 47530.23 TEST N TIME (ns) REF (ns) SCORE (1000) empty_loop 20000 193.20 empty_down_loop 10000 239.26 empty_down_loop2 10000 314.32 empty_do_loop 10000 233.52 date_now 2000 1727.19 Date.parse error for 1 prop_read 5000 205.82 prop_write 5000 146.61 prop_update 2000 257.46 prop_create 500 497.52 prop_clone 200 663.10 prop_delete 100 1158.57 array_read 2000 198.11 array_write 2000 139.18 array_prop_create 10 281.54 array_slice 10 343.12 array_length_decr 5 844.78 array_hole_length_decr 2 1181.24 array_push 5 1167.69 array_pop 5 1421.70 typed_array_read 1000 222.14 typed_array_write 2000 138.38 global_read 5000 219.04 global_write 5000 201.14 global_write_strict 5000 200.97 local_destruct 100 2259.85 global_destruct 200 1557.34 global_destruct_strict 200 1558.22 global_func_call 1000 547.51 func_call 2000 462.83 func_closure_call 2000 470.90 int_arith 10 296.96 float_arith 10 280.96 map_set_string 1 3743.18 map_set_int 2 1758.69 map_set_bigint 1 2923.03 map_delete 1 3793.47 weak_map_set 1 3976.31 weak_map_delete 1 4324.06 array_for 100 289.83 array_for_in 50 891.83 array_for_of 50 550.51 math_min 5 674.42 regexp_ascii 1 6995.44 regexp_utf16 1 7045.38 string_build1 10 311.50 string_build1x 10 311.52 string_build2c 10 315.22 string_build2 5 663.21 string_build3 5 736.85 string_build4 5 704.24 string_build_large1 1 755.26 string_build_large2 1 836.04 int_to_string 2000 633.98 int_toString 1000 932.04 float_to_string 500 1826.51 float_toString 500 2426.59 float_toFixed 500 1929.83 float_toPrecision 500 2065.51 float_toExponential 500 2028.07 string_to_int 2000 1007.40 string_to_float 2000 1033.28 bigint32_arith 5 627.15 bigint64_arith 5 950.09 bigint256_arith 2 1509.70 sort_bench 1 137.43 total 78337.74 all_test.go:614: FAIL/GOABI0 error(s) detected --- FAIL: TestQuickJS (128.44s) FAIL exit status 1 FAIL modernc.org/qbecc/lib 128.442s jnml@e5-1650:~/src/modernc.org/qbecc/lib$ ``` Smaller repro: ``` function date_parse(n) { var x0 = 0, dx = 0; var j; for(j = 0; j < n; j++) { var x1 = x0 - x0 % 1000; var x2 = -x0; var d2 = new Date(x2); console.log(d2, d2.toISOString(), Date.parse(d2.toISOString()), x2); if (Date.parse(d2.toISOString()) != x2) { console.log("Date.parse error for " + x2); } dx = (dx * 1.1 + 1) >> 0; x0 = (x0 + dx) % 8.64e15; } } date_parse(2); ``` ``` jnml@e5-1650:~/src/modernc.org/qbecc/lib/tmp/quickjs/gobi0$ qjs bug.js # gcc Thu Jan 01 1970 01:00:00 GMT+0100 1970-01-01T00:00:00.000Z 0 0 Thu Jan 01 1970 00:59:59 GMT+0100 1969-12-31T23:59:59.999Z -1 -1 jnml@e5-1650:~/src/modernc.org/qbecc/lib/tmp/quickjs/gobi0$ ../qjs bug.js # qbecc 1970-01-01T00:00:00.000Z 1970-01-01T00:00:00.000Z 0 -0 1969-12-31T23:59:59.999Z 1969-12-31T23:59:59.999Z -1 -1 jnml@e5-1650:~/src/modernc.org/qbecc/lib/tmp/quickjs/gobi0$ jnml@e5-1650:~/src/modernc.org/qbecc/lib/tmp/quickjs/gobi0$ ./gobi0 bug.js # qbecc/GOABI0 1970-01-01T00:00:00.000Z 1970-01-01T00:00:00.000Z 0 -0 1970-02-19T17:02:47.295Z 1970-02-19T17:02:47.295Z 4294967295 -1 Date.parse error for -1 ```
issue