RFR: 8256046: Shenandoah: Mix-in NULL_PTR in non-strong ShLRBNode's type [v2]

Aleksey Shipilev shade at openjdk.java.net
Mon Nov 9 13:29:00 UTC 2020


On Mon, 9 Nov 2020 11:29:10 GMT, Roman Kennke <rkennke at openjdk.org> wrote:

>> Testing found this problem (very rare/hard to reproduce):
>> 
>> # Internal Error (d:/a/jdk/jdk/jdk/src/hotspot/cpu/x86/macroAssembler_x86.cpp:880), pid=6160, tid=5828
>> # fatal error: DEBUG MESSAGE: unexpected null in intrinsic
>> 
>> I believe this may be caused by non-strong LRB reporting a non-NULL type by passing-through its input's type, even though it may actually return NULL on non-NULL inputs. If this serves as input to an intrinsic, it may lead to elimination of surrounding null-check, and thus end up passing a NULL to the intrinsic even thought it should not. 
>> 
>> Testing:
>>  - [x] hotspot_gc_shenandoah
>>  - [ ] tier1+Shenandoah
>>  - [ ] tier2+Shenandoah
>
> Roman Kennke has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Omit useless cast to oopptr

src/hotspot/share/gc/shenandoah/c2/shenandoahSupport.cpp line 2968:

> 2966:     type = type->meet(TypePtr::NULL_PTR);
> 2967:   }
> 2968:   return type;

Can probably be written as:

  if (kind() == ShenandoahBarrierSet::AccessKind::NORMAL) {
    return t2;
  }

  return t2->meet(TypePtr::NULL_PTR);

...to follow the style. Your call.

-------------

PR: https://git.openjdk.java.net/jdk/pull/1120


More information about the hotspot-gc-dev mailing list