Message: previous - next
Month: August 2016

Re: [trinity-devel] New FTBFS with GCC 6 and C++11 dialect

From: Jim <zlists@...>
Date: Thu, 18 Aug 2016 19:05:42 -0300
On Thu, Aug 18, 2016 at 20:55 (+0200), Slávek Banko wrote:

> On Wednesday 17 of August 2016 16:26:26 Jim wrote:
>> On Wed, Aug 17, 2016 at 03:00 (+0200), Slávek Banko wrote:
>>> Hi all,

Various irrelevancies <snip>ed...

>>> However, one serious problem is here.

>>> In the 'kjs' and 'tdehtml/ecma' is used HashEntry structure that
>>> contains the item 'value' of type short int - see 'kjs/lookup.h'.
>>> Into this item was stored values DOM::NodeFilter::ShowCode::SHOW_ALL
>>> = 0xFFFFFFFF (see tdehtml/dom/dom2_traversal.h) and kjs event CHANGE
>>> with value 32768 (see tdehtml/ecma/kjs_events.cpp). Both are
>>> therefore outside the range of short int.

>>> Changing the type of 'value' in HashEntry from short to long would
>>> apparently cause a change in ABI - kjs/lookup.h is part of the public
>>> includes. That's why I made the change values 0xFFFFFFFF and 32768 to
>>> -1. I think that GCC compilers version less than 6 will store these
>>> values in the same way. Therefore, I believe that the proposed patch
>>> would not cause problems == can be pushed. What is your opinion?

>> Is anyone compiling this for a 1's complement hardware platform?
>> If so, that could be an issue (now or in the future).

>> I don't have any gcc 6.0 machine to play with, so here are some
>> alternative thoughts, for what they are worth.

>> how about ~0 (or ~(short)0) to get all 1 bits?

> Format ~0 looks good, but I'm afraid of possible complications:

> 1) hash tables are generated by kjs/create_hash_table (perl script) - it 
> would have to verify what would be the behavior with expressions instead 
> of simple values.

Is that verification difficult?

> 2) enum values can be used in the code for the bindings to other 
> languages - such as python.  Use expressions instead of simple values 
> could cause problems.

Is it difficult to check that?

> Therefore, I believe that the use of the simple value -1 makes more sense.
(FWIW) Wikipedia says
        The representation used in most current computing devices is
        two's complement, although the Unisys ClearPath Dorado series
        mainframes use ones' complement.
Putting a -1 in there will not give you 0xFFFF on such machines.
Maybe no one cares...