RFR (XS): 8025566: EXCEPTION_ACCESS_VIOLATION in compiled by C1 String.valueOf method

Christian Thalinger christian.thalinger at oracle.com
Thu Oct 3 18:34:09 PDT 2013

On Oct 3, 2013, at 4:15 PM, Vladimir Kozlov <vladimir.kozlov at oracle.com> wrote:

> Christian,
> Can you explain how _metadata pointer could be NULL if it was just created and there is check h_m()->method_data() != NULL?

You are right.  Since we cannot reproduce this bug it's a guessing game.

Your comment made me go back and look again.  The reported error happened with a tier 2 compile and there is a different code path in LIRGenerator::increment_event_counter_impl() for CompLevel_limited_profile compiles:

  if (level == CompLevel_limited_profile) {
    address counters_adr = method->ensure_method_counters();
    counter_holder = new_pointer_register();
    __ move(LIR_OprFact::intptrConst(counters_adr), counter_holder);

Method::ensure_method_counters() tries to build a MethodCounters data structure if it's null but:

    counter = Method::build_method_counters(mh(), CHECK_AND_CLEAR_NULL);

it clears the exception and returns null!

I really want C++ exceptions in the compiler…

> Thanks,
> Vladimir
> On 10/2/13 8:17 PM, Christian Thalinger wrote:
>> https://bugs.openjdk.java.net/browse/JDK-8025566
>> http://cr.openjdk.java.net/~twisti/8025566
>> 8025566: EXCEPTION_ACCESS_VIOLATION in compiled by C1 String.valueOf method
>> Reviewed-by:
>> The problem is in ciMethod::ensure_method_data().  The call to ciMethodData::load_data() can fail when the backing metadata pointer is null and return with a still empty method data.  So we have to check here for non-emptiness.
>> I also removed ciMethodData::set_mature().  This method was only used with the old JSR 292 implementation.

More information about the hotspot-compiler-dev mailing list