View Issue Details [ Jump to Notes ] | [ Issue History ] [ Print ] | ||||||||
ID | Project | Category | View Status | Date Submitted | Last Update | ||||
---|---|---|---|---|---|---|---|---|---|
0000454 | mercury | Bug | public | 2018-03-09 16:25 | 2018-03-13 14:19 | ||||
Reporter | wangp | ||||||||
Assigned To | wangp | ||||||||
Priority | normal | Severity | minor | Reproducibility | always | ||||
Status | resolved | Resolution | fixed | ||||||
Product Version | |||||||||
Target Version | Fixed in Version | ||||||||
Summary | 0000454: arith_int64 failure | ||||||||
Description | arith_int64 fails on Ubuntu 16.04 x86_64 gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.9) Mercury rotd 2018-03-07 --- arith_int64.out 2018-03-09 16:23:20.780057386 +1100 +++ arith_int64.exp 2018-02-03 23:05:01.000000000 +1100 @@ -17,20 +17,20 @@ *** Test unary operation '-' *** -- -9223372036854775808 = -9223372036841988320 -- -2147483648 = 2160271136 -- -64768 = 12852256 -- -128 = 12787616 -- 0 = 12787488 -- 1 = 12787487 -- 2 = 12787486 -- 8 = 12787480 -- 10 = 12787478 -- 16 = 12787472 -- 127 = 12787361 -- 64767 = 12722721 -- 2147483647 = -2134696159 -- 9223372036854775807 = -9223372036841988319 +- -9223372036854775808 = -9223372036854775808 +- -2147483648 = 2147483648 +- -64768 = 64768 +- -128 = 128 +- 0 = 0 +- 1 = -1 +- 2 = -2 +- 8 = -8 +- 10 = -10 +- 16 = -16 +- 127 = -127 +- 64767 = -64767 +- 2147483647 = -2147483647 +- 9223372036854775807 = -9223372036854775807 *** Test unary operation 'abs' *** @@ -56,15 +56,15 @@ nabs -64768 = -64768 nabs -128 = -128 nabs 0 = 0 -nabs 1 = 12787487 -nabs 2 = 12787486 -nabs 8 = 12787480 -nabs 10 = 12787478 -nabs 16 = 12787472 -nabs 127 = 12787361 -nabs 64767 = 12722721 -nabs 2147483647 = -2134696159 -nabs 9223372036854775807 = -9223372036841988319 +nabs 1 = -1 +nabs 2 = -2 +nabs 8 = -8 +nabs 10 = -10 +nabs 16 = -16 +nabs 127 = -127 +nabs 64767 = -64767 +nabs 2147483647 = -2147483647 +nabs 9223372036854775807 = -9223372036854775807 *** Test binary operation '+' *** | ||||||||
Tags | No tags attached. | ||||||||
Attached Files |
|
Notes | |
wangp (developer) 2018-03-09 16:56 |
For this program: main(!IO) :- X = 1i64, Y = -X, write_int64(Y, !IO), nl(!IO). the compiler is producing: void MR_CALL main_2_p_0(void) { { int64_t X_4 = INT64_C(1); int64_t Y_5 = (INT64_C(12789120) - X_4); mercury__io__write_int64_3_p_0(Y_5); mercury__io__nl_2_p_0(); } } |
wangp (developer) 2018-03-09 17:57 |
The problem is with a compiler in the .pregen grade. |
wangp (developer) 2018-03-09 18:04 |
Ok, it's to do with (un)boxed int64s in a static ground term, see sgt_int64.m. |
zs (developer) 2018-03-09 20:52 |
I have noticed that both unify_gen.m and ml_unify_gen.m still retain in most of their code the assumption that every argument of a functor occupies exactly one word in the memory cell. There are places that do deal with floats that take up double words and places that deal with two or more enum fields being packed into the same word, but they are post-processing the output of a word-oriented computation. I have started changing this over the last week or so, and will continue working on it, since doing so is prerequisite for improving argument packing. I think it very likely that this work will fix this bug. |
zs (developer) 2018-03-13 06:14 |
The attached program, bar_baz.m, has code to allocate both a 64 bit float and a 64 bit integer both dynamically and statically. In pregen grades, all four allocations are boxed. This suggests to me that the bug is not in the allocation code, but I cannot check it since I don't have a 32 bit system. Can someone else who does try out this program (compiled with --no-inlining)? Maybe you could also check whether doing a deconstruct does the right thing for all of FX, FY, IX and IY, since deconstruct has special code (MR_arg_value_uncommon) for 64 bit floats but not for 64 bit ints. |
wangp (developer) 2018-03-13 11:21 |
The problem is that MR_BOXED_INT64S should be defined in .pregen grades (whether or not we are on a 32-bit or 64-bit machine). I will run a bootcheck then send a patch. |
wangp (developer) 2018-03-13 14:19 |
Fixed in commit b58cc673e |
Issue History | |||
Date Modified | Username | Field | Change |
---|---|---|---|
2018-03-09 16:25 | wangp | New Issue | |
2018-03-09 16:56 | wangp | Note Added: 0000968 | |
2018-03-09 17:57 | wangp | Note Added: 0000970 | |
2018-03-09 18:02 | wangp | File Added: sgt_int64.m | |
2018-03-09 18:04 | wangp | Note Added: 0000971 | |
2018-03-09 20:52 | zs | Note Added: 0000972 | |
2018-03-09 20:52 | zs | Assigned To | => zs |
2018-03-09 20:52 | zs | Status | new => assigned |
2018-03-13 06:14 | zs | File Added: bar_baz.m | |
2018-03-13 06:14 | zs | Note Added: 0000973 | |
2018-03-13 11:21 | wangp | Note Added: 0000974 | |
2018-03-13 14:19 | wangp | Assigned To | zs => wangp |
2018-03-13 14:19 | wangp | Status | assigned => resolved |
2018-03-13 14:19 | wangp | Resolution | open => fixed |
2018-03-13 14:19 | wangp | Note Added: 0000975 |