[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] undefined behavior of signed left shifts (was Re: [PULL 00/
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] undefined behavior of signed left shifts (was Re: [PULL 00/40] ppc patch queue 2015-06-03) |
Date: |
Fri, 05 Jun 2015 17:55:37 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.6.0 |
On 05/06/2015 17:45, Peter Maydell wrote:
>>> ...but things like "(1U << 31)" are entirely valid.
>>
>> They're only valid until someone does a ~ on them. I think it's
>> reasonable to forbid them in our coding standards, if we want to fix
>> ubsan's warning of (1 << 31).
>>
>> I don't think it's reasonable for compiler writers to exploit the
>> undefinedness of (1 << 31) anyway, and if it were possible to shut up
>> ubsan about this particular kind of undefined behavior, I would prefer it.
>
> I don't think it's reasonable for compiler writers to exploit
> undefined behaviour either, but historically they absolutely
> have done.
Most cases of undefined behavior are rooted in "you should never do that
anyway". This is not the case for bitwise operations, since they are
not mathematical concepts and the representation of integers as bits is
only implementation-defined.
> Absent a guarantee from gcc that it will never do
> so, I think we should avoid any UB in our code.
The GCC manual says "GCC does not use the latitude given in C99 and C11
only to treat certain aspects of signed '<<' as undefined, but this is
subject to change". It would certainly be nice if they removed the
"this is subject to change" part.
Paolo
- [Qemu-devel] [PULL 32/40] spapr_pci: enable basic hotplug operations, (continued)
- [Qemu-devel] [PULL 32/40] spapr_pci: enable basic hotplug operations, Alexander Graf, 2015/06/03
- [Qemu-devel] [PULL 20/40] spapr_drc: initial implementation of sPAPRDRConnector device, Alexander Graf, 2015/06/03
- Re: [Qemu-devel] [PULL 00/40] ppc patch queue 2015-06-03, Peter Maydell, 2015/06/04
- Re: [Qemu-devel] [PULL 00/40] ppc patch queue 2015-06-03, Peter Maydell, 2015/06/05
- Re: [Qemu-devel] [PULL 00/40] ppc patch queue 2015-06-03, Paolo Bonzini, 2015/06/05
- Re: [Qemu-devel] [PULL 00/40] ppc patch queue 2015-06-03, Peter Maydell, 2015/06/05
- Re: [Qemu-devel] [PULL 00/40] ppc patch queue 2015-06-03, Paolo Bonzini, 2015/06/05
- Re: [Qemu-devel] [PULL 00/40] ppc patch queue 2015-06-03, Peter Maydell, 2015/06/05
- Re: [Qemu-devel] [PULL 00/40] ppc patch queue 2015-06-03, Paolo Bonzini, 2015/06/05
- Re: [Qemu-devel] [PULL 00/40] ppc patch queue 2015-06-03, Peter Maydell, 2015/06/05
- [Qemu-devel] undefined behavior of signed left shifts (was Re: [PULL 00/40] ppc patch queue 2015-06-03),
Paolo Bonzini <=
- Re: [Qemu-devel] undefined behavior of signed left shifts (was Re: [PULL 00/40] ppc patch queue 2015-06-03), Peter Maydell, 2015/06/05
- Re: [Qemu-devel] undefined behavior of signed left shifts (was Re: [PULL 00/40] ppc patch queue 2015-06-03), Joseph Myers, 2015/06/05
Re: [Qemu-devel] [PULL 00/40] ppc patch queue 2015-06-03, Eric Blake, 2015/06/05