From 4f150726cf236755158c3d895a31b4216336fae7 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Mon, 11 Mar 2019 22:58:43 +0100 Subject: re PR middle-end/89655 (GCC crashes building linux kernel for arm 32-bit (culprit r269453)) PR middle-end/89655 PR bootstrap/89656 * vr-values.c (vr_values::update_value_range): If old_vr->varying_p (), don't update it, make new_vr also VARYING and return false. * gcc.c-torture/compile/pr89655.c: New test. From-SVN: r269597 --- gcc/vr-values.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'gcc/vr-values.c') diff --git a/gcc/vr-values.c b/gcc/vr-values.c index a734ef9..0e10aca 100644 --- a/gcc/vr-values.c +++ b/gcc/vr-values.c @@ -189,8 +189,13 @@ vr_values::update_value_range (const_tree var, value_range *new_vr) because VR_RANGE and VR_ANTI_RANGE need to be considered the same. We may not have is_new when transitioning to UNDEFINED. If old_vr->type is VARYING, we shouldn't be - called. */ - if (new_vr->undefined_p ()) + called, if we are anyway, keep it VARYING. */ + if (old_vr->varying_p ()) + { + new_vr->set_varying (); + is_new = false; + } + else if (new_vr->undefined_p ()) { old_vr->set_varying (); new_vr->set_varying (); -- cgit v1.1