RFR: 8240110: Improve NULL

Leo Korinth leo.korinth at oracle.com
Tue Apr 14 13:53:09 UTC 2020


Hi!

On 06/04/2020 01:37, David Holmes wrote:

>>
>> I agree that it could be compared against NULL_WORD, do you want me to 
>> change it? (I have no opinion on this issue)
> 
> If we're trying to clean up the use of 0, NULL, NULL_WORD then I think 
> it should be changed.

Fixed in several locations.

>>>
>>>  > new NULL value does unfortunately not convert to method pointers
>>>
>>> Is that a temporary limitation? I'm not sure what progress were are 
>>> making if some pointers can use NULL and others must use 0.
>>
>> I believe this to be a temporary limitation, my understanding is that 
>> when we get c++11 nullptr will convert to method pointers as well, I 
>> could and think I should revert these changes as I did revert my 
>> implementation of NULL, would you like that? My null_t type could, to 
>> my knowledge, not auto convert to method pointers at least not without 
>> template varargs stuff that comes in later versions of the standard.
> 
> This would look better to me as NULL.

I have reverted this and a few other places.


>>
>> This is the same issue as before with string literals and macros, my 
>> arguing is that I will not try to prove that value is (or in the 
>> future always will be) a string literal, instead I will make the code 
>> work for both string literals and pointers. I hope you do not mind the 
>> extra parentheses I added around "value".
> 
> Normal style rules for macros say to use the macro arg in parentheses - 
> but there are three other uses in the same macro.
> 

I will keep the parenthesis on the line I changed and do no additional 
such change.


> 
>> I could change CHECK_0 to use NULL_WORD though and if I do, I get 
>> compiler errors. CHECK_0 is used for both pointers and integral zeroes 
>> and types that implicitly converts from either. What the original 
>> thought was is unclear to me; is CHECK_0 to be used to return things 
>> convertible from pointers? If so, what is CHECK_NULL for?
> 
> No CHECK_0 is intended for int-returning functions (which would also 
> extend to intptr_t).

It might be intended for it, but it is not used in such a way (therefore 
my remark on compile failures when using NULL_WORD)

I will do no change here.


>>
>>> ---
>>>
>>> src/hotspot/share/utilities/globalDefinitions_solstudio.hpp
>>>
>>> It isn't clear that the issue of passing 0 as NULL in a varargs 
>>> situation is now fixed in Sol Studio.
>>>
>>
>> I guess tier1-3 would fail if not? Maybe that is a false assumption of 
>> mine?
> 
> I would consider that a necessary but not sufficient condition.
> 

I reverted my NULL/NULL_WORD redefinition so it is no issue any more at 
least.

>>>
>>> src/hotspot/share/utilities/linkedlist.hpp
>>>
>>> -    return equal<E>(_data, t, NULL);
>>> +    return equal<E>(_data, t, 0);
>>>
>>> Again concerned about the method/function pointer situation.
>>
>> I am not concerned :-) but I will revert this as it is not necessary 
>> now or in the future as I reverted my original implementation and 
>> c++11 will fix this.
> 
> Ok.

Fixed

In additions to these changes I have also /reverted/ all changes to 
NULL/NULL_WORD definitions. In the end Kim did not like them, and they 
can be fixed later when we get a more modern C++. To reflect this I will 
also change the CR title to "Improve NULL usage"

Webrev:
http://cr.openjdk.java.net/~lkorinth/8240110/part1 (NULL)
http://cr.openjdk.java.net/~lkorinth/8240110/part2 (NULL_WORD)
http://cr.openjdk.java.net/~lkorinth/8240110/part3 (reverse somewhat)

new in this mail:
http://cr.openjdk.java.net/~lkorinth/8240110/part4 (improvements 
suggested by David)
http://cr.openjdk.java.net/~lkorinth/8240110/part5 (reverse my changes 
to NULL/NULL_WORD itself)

total combined change:
http://cr.openjdk.java.net/~lkorinth/8240110/1

Testing:
running tier 1-3 (looks good so far)

Thanks,
Leo


More information about the hotspot-dev mailing list