Re: problem with euc on Win10 64bit AND Mint 32bit
- Posted by SDPringle Oct 08, 2015
- 1631 views
In the case of n=5, we have a temporary getting the value of NOVALUE returned from a function:
(gdb) continue Continuing. Breakpoint 1, _1Bin (_n_11027=_n_11027@entry=5, _s_11028=-2130608542) at t_bugmagnet_15a.c:6 6 { (gdb) n 49 Concat((object_ptr)&_6222, _6221, _s_11028); (gdb) 6 { (gdb) 10 object _6222 = NOVALUE; (gdb) 17 if (!IS_ATOM_INT(_n_11027)) { (gdb) 24 if (_n_11027 <= 0) (gdb) 29 _6220 = _2mod(_n_11027, 2); (gdb) p _6220 $14 = -1073741825 (gdb) n 28 _6219 = _n_11027 >> 1; (gdb) 29 _6220 = _2mod(_n_11027, 2); (gdb) p _6220 $15 = -1073741825
Yet if you step into this function gdb reports it returns an integer value
(gdb) s 28 _6219 = _n_11027 >> 1; (gdb) 29 _6220 = _2mod(_n_11027, 2); (gdb) _2mod (_x_477=5, _y_478=_y_478@entry=2) at math.c:241 241 { (gdb) n 264 _sign_1__tmp_at19_486 = (_y_478 > 0); (gdb) 265 _sign_2__tmp_at19_487 = (_y_478 < 0); (gdb) 264 _sign_1__tmp_at19_486 = (_y_478 > 0); (gdb) 260 _sign_2__tmp_at2_483 = (_x_477 < 0); (gdb) 259 _sign_1__tmp_at2_482 = (_x_477 > 0); (gdb) 260 _sign_2__tmp_at2_483 = (_x_477 < 0); (gdb) 261 _sign_inlined_sign_at_2_481 = _sign_1__tmp_at2_482 - _sign_2__tmp_at2_483; (gdb) 264 _sign_1__tmp_at19_486 = (_y_478 > 0); (gdb) 265 _sign_2__tmp_at19_487 = (_y_478 < 0); (gdb) 266 _sign_inlined_sign_at_19_485 = _sign_1__tmp_at19_486 - _sign_2__tmp_at19_487; (gdb) 267 if (_sign_inlined_sign_at_2_481 == _sign_inlined_sign_at_19_485) (gdb) 284 return _154; (gdb) p _sign_inlined_sign_at_2_481 $16 = 1 (gdb) p _154 $17 = 1 (gdb) n 326 } (gdb) finish Run till exit from #0 _2mod (_x_477=5, _y_478=_y_478@entry=2) at math.c:326 _1Bin (_n_11027=<optimized out>, _n_11027@entry=5, _s_11028=-2130608542) at t_bugmagnet_15a.c:31 31 if (IS_ATOM_INT(_6220)) { Value returned is $18 = 1 (gdb) n 29 _6220 = _2mod(_n_11027, 2); (gdb) p _6220 $19 = -1073741825
gdb tells me _2mod() returns 1, yet when I inspect the value of the returned variable the value is the same as the special NOVALUE number used to indicate the value has not been assigned.