Undefined behaviour in hotspot
Christian Thalinger
christian.thalinger at oracle.com
Thu Apr 24 20:33:31 UTC 2014
On Apr 21, 2014, at 10:41 PM, Volker Simonis <volker.simonis at gmail.com> wrote:
> Hi,
>
> I think the simplest and safest fix would be to make encoding() (and
> all the corresponding functions) static functions which take a
> Register as argument like:
>
> static int encoding(const RegisterImpl* r) { assert(is_valid(r),
> "invalid register"); return (intptr_t)r; }
>
> This wouldn't waste any more memory and it would be fully C++
> compliant at the price of a slightly more verbose usage:
>
> 2577 void Assembler::push(Register src) {
> 2578 int encode = prefix_and_encode(RegisterImpl::encoding(src));
> 2579
>
> And of course this would work with any compiler.
>
> What do you think?
I’d rather make Register a real C++ class with an _encoding field. There are not that many registers used or allocated that it would make a big difference in memory usage.
>
> Regards,
> Volker
>
>
> On Mon, Apr 21, 2014 at 8:30 PM, Omair Majid <omajid at redhat.com> wrote:
>> * David Chase <david.r.chase at oracle.com> [2014-04-21 13:53]:
>>>
>>> On 2014-04-21, at 12:17 PM, Omair Majid <omajid at redhat.com> wrote:
>>>> I can ping them, but honestly, I wouldn't be surprised at all if the
>>>> only response I get is "no". I don't have any official communication
>>>> channels with them, so my input is not any different from anyone else's.
>>>>
>>>> Can you elaborate on what flag/pragma you have in mind? Just something
>>>> to play nice with NULL pointers?
>>>
>>> Not just null pointers. Also optimizations that pretend that integer overflow
>>> doesn't happen (i.e., optimizations that change program behavior when it
>>> does) also need to be disabled.
>>
>> My knowledge of C/C++ is fairly limited, so please bear with me. There
>> are a few relevant options already listed in 'man gcc':
>>
>> -Wstrict-overflow=n
>> This option is only active when -fstrict-overflow is active.
>> It warns about cases where the compiler optimizes based on
>> the assumption that signed overflow does not occur
>>
>> -fwrapv
>> This option instructs the compiler to assume that signed
>> arithmetic overflow of addition, subtraction and
>> multiplication wraps around using twos-complement
>> representation.
>>
>> Do you mean others?
>>
>> Thanks,
>> Omair
>>
>> --
>> PGP Key: 66484681 (http://pgp.mit.edu/)
>> Fingerprint = F072 555B 0A17 3957 4E95 0056 F286 F14F 6648 4681
More information about the hotspot-dev
mailing list