From 0c07aaa7aeef2f7e3e31817e73d7d5f82bf7afd6 Mon Sep 17 00:00:00 2001 From: Vladimir Kozlov Date: Thu, 30 Apr 2026 04:14:41 +0000 Subject: [PATCH] 8383420: SIGSEGV in PhaseChaitin::gather_lrg_masks Reviewed-by: dlong, qamai --- src/hotspot/share/opto/callGenerator.cpp | 7 +++++++ src/hotspot/share/opto/chaitin.hpp | 3 ++- src/hotspot/share/opto/loopTransform.cpp | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/hotspot/share/opto/callGenerator.cpp b/src/hotspot/share/opto/callGenerator.cpp index 49897ca3c17..1ef7e3210c6 100644 --- a/src/hotspot/share/opto/callGenerator.cpp +++ b/src/hotspot/share/opto/callGenerator.cpp @@ -646,6 +646,12 @@ void CallGenerator::do_late_inline_helper() { for (uint i1 = 0; i1 < size; i1++) { map->init_req(i1, call->in(i1)); } + // Call node has in(ReturnAdr) set to top() node. + // We have to set map->in(ReturnAdr) to correct value + // because it is used by uncommon traps. + Node* ret_adr = C->start()->proj_out_or_null(TypeFunc::ReturnAdr); + precond(ret_adr != nullptr); + map->set_req(TypeFunc::ReturnAdr, ret_adr); // Make sure the state is a MergeMem for parsing. if (!map->in(TypeFunc::Memory)->is_MergeMem()) { @@ -661,6 +667,7 @@ void CallGenerator::do_late_inline_helper() { map->set_req(TypeFunc::Parms + i1, top); } jvms->set_map(map); + precond(ret_adr == jvms->map()->returnadr()); // Make enough space in the expression stack to transfer // the incoming arguments and return value. diff --git a/src/hotspot/share/opto/chaitin.hpp b/src/hotspot/share/opto/chaitin.hpp index 2d4f7eeb3f2..fd834c1002b 100644 --- a/src/hotspot/share/opto/chaitin.hpp +++ b/src/hotspot/share/opto/chaitin.hpp @@ -353,7 +353,8 @@ public: return _names.at(idx); } - uint live_range_id(const Node *node) const { + uint live_range_id(const Node* node) const { + precond(node != nullptr); return _names.at(node->_idx); } diff --git a/src/hotspot/share/opto/loopTransform.cpp b/src/hotspot/share/opto/loopTransform.cpp index b65f90093ab..e488421ff03 100644 --- a/src/hotspot/share/opto/loopTransform.cpp +++ b/src/hotspot/share/opto/loopTransform.cpp @@ -4145,7 +4145,7 @@ bool PhaseIdealLoop::intrinsify_fill(IdealLoopTree* lpt) { call->init_req(TypeFunc::Control, head->init_control()); call->init_req(TypeFunc::I_O, C->top()); // Does no I/O. call->init_req(TypeFunc::Memory, mem_phi->in(LoopNode::EntryControl)); - call->init_req(TypeFunc::ReturnAdr, C->start()->proj_out_or_null(TypeFunc::ReturnAdr)); + call->init_req(TypeFunc::ReturnAdr, C->top()); Node* frame = new ParmNode(C->start(), TypeFunc::FramePtr); _igvn.register_new_node_with_optimizer(frame); call->init_req(TypeFunc::FramePtr, frame);