[Bug c/16790] [3.3/3.4/3.5 regression] Integer down cast ignored in larger expression
bangerth at dealii dot org
gcc-bugzilla@gcc.gnu.org
Tue Jul 27 23:12:00 GMT 2004
------- Additional Comments From bangerth at dealii dot org 2004-07-27 23:12 -------
Confirmed. A regression in 3.3/3.4/mainline against 2.95. Here's
a reduced testcase:
----------------
void abort ();
static void compute(unsigned int u1)
{
unsigned char same_result;
signed short y_final_1;
signed short y_middle;
signed short y_final_2;
y_final_1 = (signed short)( (signed short)(u1 << 1) * 3 >> 1);
y_middle = (signed short)(u1 << 1);
y_final_2 = (signed short)( y_middle * 3 >> 1);
if (y_final_1 != y_final_2)
abort ();
}
main()
{
compute(0x4000U);
}
-----------------------------
Note that (0x4000<<1) is just the corner case when casted to signed int,
since it has only the sign bit set, none of the other bits are set. We
seem to get this wrong somehow.
W.
--
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Ever Confirmed| |1
Known to fail| |3.2.3 3.3.3 3.4.0 3.5.0
Known to work| |2.95
Last reconfirmed|0000-00-00 00:00:00 |2004-07-27 23:12:21
date| |
Summary|Integer down cast ignored in|[3.3/3.4/3.5 regression]
|larger expression |Integer down cast ignored in
| |larger expression
Target Milestone|--- |3.3.5
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=16790
More information about the Gcc-bugs
mailing list