8229970: ZGC: C2: fixup_uses_in_catch may fail when expanding many uses

Reviewed-by: kvn, thartmann
This commit is contained in:
Nils Eliasson 2019-08-23 10:11:18 +02:00
parent 67738a72bd
commit 6e3a246c9a

View File

@ -1001,16 +1001,12 @@ static void call_catch_cleanup_one(PhaseIdealLoop* phase, LoadNode* load, Node*
// Process the loads successor nodes - if any is between // Process the loads successor nodes - if any is between
// the call and the catch blocks, they need to be cloned to. // the call and the catch blocks, they need to be cloned to.
// This is done recursively // This is done recursively
int outcnt = load->outcnt(); for (uint i = 0; i < load->outcnt();) {
uint index = 0; Node *n = load->raw_out(i);
for (int i = 0; i < outcnt; i++) { assert(!n->is_LoadBarrier(), "Sanity");
if (index < load->outcnt()) { if (!fixup_uses_in_catch(phase, ctrl, n)) {
Node *n = load->raw_out(index); // if no successor was cloned, progress to next out.
assert(!n->is_LoadBarrier(), "Sanity"); i++;
if (!fixup_uses_in_catch(phase, ctrl, n)) {
// if no successor was cloned, progress to next out.
index++;
}
} }
} }