JDK 9 build with GCC 6.1.1
David Holmes
david.holmes at oracle.com
Mon Jun 27 20:43:19 UTC 2016
On 27/06/2016 9:45 PM, Andrew Haley wrote:
> On 27/06/16 12:32, David Holmes wrote:
>> I wasn't aware that we have any reliance on gcc doing any kind of "null
>> pointer check" ??
>
> Ah, right, I assumed you'd seen this before.
>
> If GCC sees something like
>
> a->foo();
> if (a) {
> b();
> }
>
> it will turn it into
>
> a->foo();
> b();
>
> This surprises some people, but is quite legal.
Okay. So I know I was initially surprised we have code that can do:
a->foo();
when a is NULL, but that is because it is actually compiled as:
foo(a);
IIRC foo() has a "if (this != NULL)" check internally.
I'm kind of surprised that the compiler itself seems to think a->foo()
implies a is not NULL.
I also hope it either is extremely smart about this or else very
conservative. Would want it to make a mess of this:
if (init(&a) != NULL) {
a->foo();
}
else {
log(...);
}
if (a)
a->bar();
Cheers,
David
> Andrew.
>
>
More information about the hotspot-dev
mailing list