Crash in CallNode::extract_projections

Florian Weimer fw at deneb.enyo.de
Tue Aug 25 07:49:41 UTC 2020


I see a crash with the current tip:

Current CompileTask:
C2:  45117 7825 %     4       com.sun.crypto.provider.CounterMode::implCrypt @ 3 (88 bytes)

Stack: [0x00007fa82ccc1000,0x00007fa82cdc2000],  sp=0x00007fa82cdbb660,  free space=1001k
Native frames: (J=compiled Java code, A=aot compiled Java code, j=interpreted, Vv=VM code, C=native code)
V  [libjvm.so+0x71ea38]  CallNode::extract_projections(CallProjections*, bool, bool)+0x298
V  [libjvm.so+0x157f3bf]  ShenandoahBarrierC2Support::find_bottom_mem(Node*, PhaseIdealLoop*)+0xbf
V  [libjvm.so+0x1580b0a]  ShenandoahBarrierC2Support::call_lrb_stub(Node*&, Node*&, Node*, Node*&, Node*, bool, PhaseIdealLoop*)+0x6a
V  [libjvm.so+0x158ceea]  ShenandoahBarrierC2Support::pin_and_expand(PhaseIdealLoop*)+0x1b0a
V  [libjvm.so+0x14c716c]  ShenandoahBarrierSetC2::optimize_loops(PhaseIdealLoop*, LoopOptsMode, VectorSet&, Node_Stack&, Node_List&) const+0x3c
V  [libjvm.so+0x10e897c]  PhaseIdealLoop::build_and_optimize(LoopOptsMode)+0xebc
V  [libjvm.so+0x15830fe]  ShenandoahBarrierC2Support::expand(Compile*, PhaseIterGVN&)+0x1de
V  [libjvm.so+0x14c704f]  ShenandoahBarrierSetC2::expand_barriers(Compile*, PhaseIterGVN&) const+0xf
V  [libjvm.so+0x88e0d0]  Compile::Optimize()+0xef0
V  [libjvm.so+0x88f0cf]  Compile::Compile(ciEnv*, ciMethod*, int, bool, bool, bool, bool, DirectiveSet*)+0xe0f
V  [libjvm.so+0x70a2c3]  C2Compiler::compile_method(ciEnv*, ciMethod*, int, bool, DirectiveSet*)+0x113
V  [libjvm.so+0x89b282]  CompileBroker::invoke_compiler_on_method(CompileTask*)+0x9b2
V  [libjvm.so+0x89bc68]  CompileBroker::compiler_thread_loop()+0x4a8
V  [libjvm.so+0x16e57cf]  JavaThread::thread_main_inner()+0x1bf
V  [libjvm.so+0x16e9f66]  Thread::call_run()+0xf6
V  [libjvm.so+0x1317cc6]  thread_native_entry(Thread*)+0x116

The replay log ends with:

ciMethod com/sun/crypto/provider/CounterMode increment ([B)V 1024 0 769188 0 0
ciMethod com/sun/crypto/provider/CounterMode implCrypt ([BII[BI)I 112 121970 1980 0 -1
ciMethod com/sun/crypto/provider/SymmetricCipher encryptBlock ([BI[BI)V 0 0 1 0 -1
ciMethod com/sun/crypto/provider/AESCrypt encryptBlock ([BI[BI)V 914 0 771254 0 0
ciMethod com/sun/crypto/provider/AESCrypt implEncryptBlock ([BI[BI)V 366 4744 322781 0 -1
compile com/sun/crypto/provider/CounterMode implCrypt ([BII[BI)I 3 4 inline 3 0 -1 com/sun/crypto/provider/CounterMode implCrypt ([BII[BI)I 1 35 com/sun/crypto/provider/AESCrypt encryptBlock ([BI[BI)V 1 42 com/sun/crypto/provider/CounterMode increment ([B)V

Poking around the core file, the crash happens because
pn->unique_ctrl_out() is zero:

        // For Control (fallthrough) and I_O (catch_all_index) we have CatchProj -> Catch -> Proj
        projs->fallthrough_proj = pn;
        const Node *cn = pn->unique_ctrl_out();
        if (cn->is_Catch()) {
          ProjNode *cpn = NULL;

pn has been optimized out, but I see this:

(gdb) print *i._last
$2 = {_vptr.Node = 0x7fa8306a9ae0 <vtable for ProjNode+16>,
   _in = 0x7fa7e8a502b8, _out = 0x7fa7e8a502e0, 
  _cnt = 1, _max = 1, _outcnt = 3, _outmax = 4, _idx = 302,
   _parse_idx = 302, _class_id = 8, _flags = 64, 
  static NO_HASH = 0, static NotAMachineReg = 4294901760,
  _debug_idx = -2145720496, _debug_orig = 0x0, 
  _hash_lock = 1, _last_del = 0x7fa7e8a50f88, _del_tick = 4}


More information about the shenandoah-dev mailing list