RFR: 8079093: Remove FakeRttiSupport workaround for gcc -Wtypes-limit
Kim Barrett
kim.barrett at oracle.com
Wed Jun 3 16:26:03 UTC 2015
On Jun 3, 2015, at 9:34 AM, Volker Simonis <volker.simonis at gmail.com> wrote:
>
> Hi Kim,
>
> as far as I can see, TagType is a template parameter. What if this
> parameter is of type unsigned?
>
> Wouldn't we get a warning that the comparison '0 <= tag' is always
> true? So why not cast the tag in the comparison as well '0 <=
> (intx)tag’.
Remember when we were discussing the addition of -Wtype-limits, I said
I had some code that would be tripped up by it due to a gcc bug fixed
in 4.8? This is that code.
But even with the restriction of that warning flag to gcc4.8 and
later, at the time I still needed the workaround. This was because
the the Mac build tools we were using included gcc4.2, which
unconditionally turned on the buggy version of -Wtype-limits checking,
with no way to turn it off (-W[no-]type-limits didn't show up until
gcc4.3). This is no longer a problem, now that we've updated the
minimum supported build tools for the Mac, so the workaround can be
removed.
> You also changed 'tag < (sizeof(uintx) * BitsPerByte' to 'tag <
> BitsPerWord' but I don't think that is safe because it is not
> guaranteed that sizeof(TagType)==BitsPerWord. Currently
> FakeRttiSupport is only instantiated with TagType=Name where Name is
> an enum but that enum can very well be less than 32-bit wide as the
> C++ standard only requires that en enum is beeing backed up by an
> underlying integral type which is big enough to hold all the enum
> values. So I'd suggest to better keep the old assertion.
I don't understand this comment.
The change is to replace the expression
(sizeof(uintx) * BitsPerByte)
with the equivalent value'd (but simpler and more descriptive)
expression
BitsPerWord
The purpose of validate_tag is to ensure the tag value is in the range
[0, BitsPerWord) so that the shift in tag_bit is safe.
Nothing here cares about the size of TagType, only about the runtime
value of the tag. It might be that the set of possible values for a
given instantiation of TagType guarantee (some of) the range checks
will pass, but that's not a problem, so long as the compiler doesn't
inappropriately complain.
> Regards,
> Volker
>
>
> On Thu, Apr 30, 2015 at 7:14 AM, Kim Barrett <kim.barrett at oracle.com> wrote:
>> Please review this removal of a workaround to avoid spurious compiler
>> warnings when building on MacOSX.
>>
>> With the move to a newer minimum compiler version for MacOSX, the
>> workaround is no longer needed.
>>
>> CR:
>> https://bugs.openjdk.java.net/browse/JDK-8079093
>>
>> Webrev:
>> http://cr.openjdk.java.net/~kbarrett/8079093/webrev/
>>
>> Testing:
>> JPRT
More information about the hotspot-gc-dev
mailing list