RFR: 8234331: Add robust and optimized utility for rounding up to next power of two+

Claes Redestad claes.redestad at oracle.com
Thu Dec 5 22:26:54 UTC 2019



On 2019-12-05 19:04, Claes Redestad wrote:
> On 2019-12-05 18:49, Erik Österlund wrote:
>> Hi Claes,
>>
>> I wonder what issue you ran into with std::numeric_limit on Solaris. I 
>> would personally like to understand that
>> before dismissing its use and rolling our own function instead.
>> Note that std::numeric_limit does not accept CV qualified types - 
>> perhaps that is what you ran into.
> 
> slowdebug failed to build with the following:
> 
> [2019-12-05T01:34:22,502Z] Undefined            first referenced
> [2019-12-05T01:34:22,502Z]  symbol                  in file
> [2019-12-05T01:34:22,502Z] unsigned
> std::_Integer_limits<unsigned,0U,4294967295U,-1,true>::max()
> 
>>
>> Perhaps if you pass in RemoveCv<T>::type instead of T to that trait, 
>> things will work properly.
>> If you really want to note use numeric_limit, then you might have to 
>> stick in some more sanity checks in
>> that functions, such as checking that the input is integral, etc. And 
>> dynamically calculating the limit
>> does seem unfortunate. In that case I'd rather we rolled our own 
>> numeric limit trait, but I would be
>> surprised if that is indeed necessary.
> 
> I can try the RemoveCv<T> trick. This "private" max_value utility is not
> performance critical since it's only used for an assert and in tests,
> but yes it'd be much preferable if we could use std::numeric_limits<..>

This doesn't fix the slowdebug build failure on Solaris.

Ok if I file a follow-up bug to examine this in depth, and move ahead 
with the version here (open.05)?

/Claes


More information about the hotspot-runtime-dev mailing list