------- Comment #20 from rguenth at gcc dot gnu dot org 2008-01-14 16:55
-------
So even if you fix that, and you'll end up with
<unnamed-unsigned:24> D.2029;
<bb 2>:
D.2029 = (<unnamed-unsigned:24>) (unsigned int) ((int) x.i + -1);
x.i = D.2029;
if (D.2029 != 16777215)
goto <bb 3>;
else
goto <bb 4>;
before expand, the truncation at the store to register D.2029 still is
not reflected in code generated by expand, if the language does not
have REDUCE_BIT_FIELD_OPERATIONS set.
Which means that the GIMPLE IL
bool retval.0;
<unnamed-unsigned:24> D.2025;
int D.2026;
int D.2027;
unsigned int D.2028;
<unnamed-unsigned:24> D.2029;
unsigned int D.2030;
unsigned int D.2031;
D.2025 = x.i;
D.2026 = (int) D.2025;
D.2027 = D.2026 + -1;
D.2028 = (unsigned int) D.2027;
D.2029 = (<unnamed-unsigned:24>) D.2028;
x.i = D.2029;
D.2025 = x.i;
retval.0 = D.2025 != 16777215;
if (retval.0)
still does not have frontend independent semantics. IMHO this is a
middle-end bug.
Let's hope that the IL fix remove the issues with libjava you get into
if enabling the langhook for C++.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33887