RFR: 8178495: Bug in the align_size_up_ macro

Stefan Karlsson stefan.karlsson at oracle.com
Fri Jun 30 15:15:49 UTC 2017


Fixing the logging with SCOPED_TRACE was only tested locally, but failed 
on OSX. Here's a fix for that problem:
  http://cr.openjdk.java.net/~stefank/8178495/webrev.02
  http://cr.openjdk.java.net/~stefank/8178495/webrev.02.delta

Passes JPRT now.

StefanK

On 2017-06-30 10:06, Stefan Karlsson wrote:
> Hi Kim,
>
> Updated webrevs:
>  http://cr.openjdk.java.net/~stefank/8178495/webrev.01
>  http://cr.openjdk.java.net/~stefank/8178495/webrev.01.delta
>
> Inlined:
>
> On 2017-06-30 00:04, Kim Barrett wrote:
>>> On Jun 28, 2017, at 11:08 AM, Stefan Karlsson 
>>> <stefan.karlsson at oracle.com> wrote:
>>>
>>> Hi all,
>>>
>>> Please review this patch to fix a bug in the align_size_up_ macro.
>>>
>>> http://cr.openjdk.java.net/~stefank/8178495/webrev.00/
>>> https://bugs.openjdk.java.net/browse/JDK-8178495
>> ------------------------------------------------------------------------------ 
>>
>> src/share/vm/utilities/globalDefinitions.hpp
>>   514 #define widen_to_type_of(what, type_carrier) ((what) | 
>> ((type_carrier) & 0))
>>
>> I think a better form of widen_to_type_of is the following:
>>
>> #define widen_to_type_of(what, type_carrier) (true ? (what) : 
>> (type_carrier))
>>
>> The difference is that this just promotes as needed, and will never
>> execute any part of type_carrier. The definition in the webrev may not
>> be able to completely optimize away the carrier expression under some
>> conditions.
>
> Thanks for the suggestion.
>
>>
>> ------------------------------------------------------------------------------ 
>>
>> test/native/utilities/test_align.cpp
>>    35 struct TypeInfo : AllStatic {
>>    36   static const bool is_unsigned = T(-1) > T(0);
>>    37   static const T    max = is_unsigned
>>
>> We recently (JDK-8181318) made it possible to #include <limits> and
>> use std::numeric_limits<T>, so you could get is_signed and max() from
>> there.  max_alignment could then just be a static helper function
>> template.
>>
>> Also here:
>>   54 static const intptr_t max_intptr = (intptr_t)max_intx;
>
> Done.
>
>>
>> ------------------------------------------------------------------------------ 
>>
>> test/native/utilities/test_align.cpp
>>    25 #include "logging/log.hpp"
>> and
>>    44 const static bool logging_enabled = false;
>>    45 #define log(...)            \
>>    ...
>>
>> I'm guessing the logging macro is because logging/log stuff isn't
>> initialized yet when executing a TEST (as opposed to a TEST_VM)?  So
>> the #include is superfluous?
>
> You are right.
>
> I changed the implementation to use SCOPED_TRACE, as you suggested in 
> another mail.
>
> Thanks,
> StefanK
>



More information about the hotspot-dev mailing list