From 75a5b7dd3341004a8e68dcdfa8c926f119a66a33 Mon Sep 17 00:00:00 2001 From: Alexandre Oliva Date: Tue, 2 Oct 2012 19:58:37 +0000 Subject: [PATCH] re PR debug/54177 (Segfault in cselib_lookup due to NULL_RTX passed from vt_add_function_parameter) PR debug/54177 * var-tracking.c (vt_add_function_parameter): Bail if var_lowpart fails. From-SVN: r191999 --- gcc/ChangeLog | 6 ++++++ gcc/var-tracking.c | 7 ++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4612f032fa7..1cb0b5c87c1 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2012-10-02 Alexandre Oliva + + PR debug/54177 + * var-tracking.c (vt_add_function_parameter): Bail if + var_lowpart fails. + 2012-10-02 H.J. Lu PR target/54741 diff --git a/gcc/var-tracking.c b/gcc/var-tracking.c index 9f5bc126114..bbd2f4b6923 100644 --- a/gcc/var-tracking.c +++ b/gcc/var-tracking.c @@ -9428,6 +9428,7 @@ vt_add_function_parameter (tree parm) && GET_CODE (incoming) != PARALLEL) { cselib_val *val; + rtx lowpart; /* ??? We shouldn't ever hit this, but it may happen because arguments passed by invisible reference aren't dealt with @@ -9436,7 +9437,11 @@ vt_add_function_parameter (tree parm) if (offset) return; - val = cselib_lookup_from_insn (var_lowpart (mode, incoming), mode, true, + lowpart = var_lowpart (mode, incoming); + if (!lowpart) + return; + + val = cselib_lookup_from_insn (lowpart, mode, true, VOIDmode, get_insns ()); /* ??? Float-typed values in memory are not handled by