Problem with CHECK_NULL macro in return statements
Christian Thalinger
christian.thalinger at oracle.com
Tue Nov 6 08:18:27 PST 2012
On Nov 5, 2012, at 9:44 AM, Volker Simonis <volker.simonis at gmail.com> wrote:
> Hi,
>
> we indeed discussed this topic three years ago:
>
> http://mail.openjdk.java.net/pipermail/hotspot-dev/2009-October/thread.html#2175
>
> The general outcome of the discussion was to:
>
> Have a look at every single method which uses the
> check macro in a return statement:
> - if it only has callers which check for pending exceptions themselves
> we can safely replace CHECK with THREAD. This would eliminate the
> unreachable code and allow the compiler to emit tail calls.
> - if it has callers which don't check for pending exception, we should
> introduce a temporary variable.
>
> I promised to prepare a Webrev that time which I haven't done until
> now so I'm a little bit reluctant to promise it again:)
> But I'll try my best to fix it this time!
I knew the ball was in your court :-D
-- Chris
>
> Regards,
> Volker
>
>
>
> On Mon, Nov 5, 2012 at 5:44 PM, Christian Thalinger
> <christian.thalinger at oracle.com> wrote:
>>
>> On Nov 2, 2012, at 9:38 AM, "Doerr, Martin" <martin.doerr at sap.com> wrote:
>>
>> Hello everybody,
>>
>>
>>
>> I found many places at which the CHECK_NULL macro gets used in a return
>> statement like the following one:
>>
>> return the_table()->basic_add(index, (u1*)buffer, len, hashValue, true,
>> CHECK_NULL);
>>
>>
>>
>> However, this does not work as one would usually expect. The macro gets
>> expanded to:
>>
>> __the_thread__); if
>> ((((ThreadShadow*)__the_thread__)->has_pending_exception())) return NULL; (0
>>
>>
>>
>> The return statement above prevents the code after “__the_thread__);” from
>> ever getting evaluated.
>>
>>
>> There was a discussion with Volker about this issue some time ago. I can't
>> remember what the outcome was. Do you guys have a fix to propose?
>>
>> -- Chris
>>
>>
>>
>> Kind regards,
>>
>> Martin
>>
>>
More information about the hotspot-compiler-dev
mailing list