This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug middle-end/44608] unspecified signed overflow applied to unsigned int
- From: "avr at gjlay dot de" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 21 Jun 2010 12:27:12 -0000
- Subject: [Bug middle-end/44608] unspecified signed overflow applied to unsigned int
- References: <bug-44608-19351@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #7 from avr at gjlay dot de 2010-06-21 12:27 -------
(In reply to comment #5)
> It is folding from the frontend that changes
>
> if (y >= 0x80000000)
>
> to
>
> if ((int) y < 0)
>
> (see code == LT instead of code == GEU)
>
> But the main issue is that y = -y to abs is bogus (but we can't easily tell
> that as on RTL operands do not have a signedness).
Both transformation are ok from the target's point of view. The bad thing is
that undefinedness is propagated to RTL which is supposed to be an algebraic
formulation of the target's instruction set. But in this case RTL is treated
like a low level representation of C (or any other language gcc supports).
To reproduce the problem it seems essential that there is an abssi2 insn in the
md.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44608