This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [SPARC] Fix PR target/60941
- From: Mikael Pettersson <mikpelinux at gmail dot com>
- To: Eric Botcazou <ebotcazou at adacore dot com>
- Cc: Jakub Jelinek <jakub at redhat dot com>, gcc-patches at gcc dot gnu dot org
- Date: Sat, 26 Apr 2014 16:31:18 +0200
- Subject: Re: [SPARC] Fix PR target/60941
- Authentication-results: sourceware.org; auth=none
- References: <3316944 dot sc4MgGFZdG at polaris> <1723181 dot Y3gD841okm at polaris> <20140425112922 dot GO1817 at tucnak dot redhat dot com> <5910732 dot kQfqzErysb at polaris>
Eric Botcazou writes:
> > > Not clear to me, (2U << i) should be zero if the shift count is masked.
> >
> > 2U << 31 is undefined behavior on those targets.
>
> Precisely not, or else we are not talking about the same notion of masking.
I believe Jakub is referring to the following in the C standard:
"Bitwise shift operators
...
Semantics
... If the value of the right operand ... is greater than or equal to the
width of the promoted left operand, the behavior is undefined."
So on 16-bit int systems you can't portably shift 2U by more than 15.
(I'm not worried about the HW blowing up, but GCC itself has a long history
of exploiting no-undefinedness assumptions.)
/Mikael