This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c/32448] [3.3 / 3.4 / 4.1 / 4.2 / 4.3 Regression] abs / printf bug
- From: "rob1weld at aol dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 22 Jun 2007 09:42:21 -0000
- Subject: [Bug c/32448] [3.3 / 3.4 / 4.1 / 4.2 / 4.3 Regression] abs / printf bug
- References: <bug-32448-13830@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #8 from rob1weld at aol dot com 2007-06-22 09:42 -------
A earlier version of this program had these lines in it:
...
f = abs((float)(a));
g = fabs((float)(a));
h = (int)abs(a);
i = 0.0;
printf("a = %.2f b = %.2f c = %.2f d = %.2f e = %.2f ", a, b, c, d,
e);
printf("f = %.2f g = %.2f h = %.2f i = %.2f\n", f, g, h, i);
printf("a = %d b = %d c = %d d = %d e = %d ", a, b, c, d, e);
printf("f = %d g = %d h = %d i = %d\n", f, g, h, i);
printf("i2 = %d\n", i);
return 0;
...
Here is the output:
/* Output:
a = 16.00 b = 0.00 c = 16.00 d = 16.00 e = 16.00 f = 0.00 g = 16.00 h =
0.00 i = 0.00
a = 0 b = 1076887552 c = 0 d = 0 e = 0 f = 0 g = 0 h = 0 i = 1076887552
i2 = 0
*/
Notice that the prior time that the 9th variable was "1076887552" (as it is in
comment 7). Using gdb I see that print /x 1076887552 = 0x40300000 . It might be
using the stack pointer for the value.
Notice that "i" and "i2" both print the value of "i" and that it is different -
it is as if gcc is using a pointer into memory instead of the actual value.
I'll work on some debugging and see if I can find out how it derives the value
of "i" that it prints differently each time.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32448