|
From: | Rik |
Subject: | [Octave-bug-tracker] [bug #54572] int64 does not saturate correctly in negative direction |
Date: | Tue, 28 Aug 2018 16:41:30 -0400 (EDT) |
User-agent: | Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:61.0) Gecko/20100101 Firefox/61.0 |
Follow-up Comment #18, bug #54572 (project octave): I ran the code through the debugger and printed out the intermediate values. (gdb) p x $13 = -9223372036854775808 (gdb) p y $14 = <optimized out> (gdb) p ux $15 = -2 (gdb) p uy $16 = -9223372036854775808 (gdb) p (ux & uy) $17 = -9223372036854775808 (gdb) p __signbit (~u) $18 = 128 The code path that is taken ends up going through the if at the very bottom if ((ux & uy) < 0) { u = octave_int_base<T>::max_val () + __signbit (~u); } I compiled again with -g -O1 and verified that the output is correct. When I run it under gdb the values are identical. This points to the actual '+' operator on the line above. (gdb) p x $1 = -9223372036854775808 (gdb) p y $2 = <optimized out> (gdb) p ux $3 = -2 (gdb) p uy $4 = -9223372036854775808 (gdb) n 136 u = octave_int_base<T>::max_val () + __signbit (~u); (gdb) p ux & uy $5 = -9223372036854775808 (gdb) p __signbit (~u) $6 = 128 _______________________________________________________ Reply to this item at: <http://savannah.gnu.org/bugs/?54572> _______________________________________________ Message sent via Savannah https://savannah.gnu.org/
[Prev in Thread] | Current Thread | [Next in Thread] |