From 40e02b4a76a59504e2708e7012dddd0eafb9d423 Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Wed, 4 Feb 2004 00:53:48 +0100 Subject: [PATCH] alias.c (find_base_term, get_addr): Do not dereference NULL pointer when all VALUE's locations has been invalidated. * alias.c (find_base_term, get_addr): Do not dereference NULL pointer when all VALUE's locations has been invalidated. (rtx_equal_for_memref_p): Simplify checking of VALUEs. From-SVN: r77201 --- gcc/ChangeLog | 6 ++++++ gcc/alias.c | 25 ++++++++++++++----------- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 28688c942cd..cdf9076f30a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2004-02-04 Jan Hubicka + + * alias.c (find_base_term, get_addr): Do not dereference NULL + pointer when all VALUE's locations has been invalidated. + (rtx_equal_for_memref_p): Simplify checking of VALUEs. + 2004-02-03 Wolfgang Bangerth * doc/invoke.texi (x86 options): Fix spelling/wording. diff --git a/gcc/alias.c b/gcc/alias.c index 00060fceea1..f0cfe4cf7a3 100644 --- a/gcc/alias.c +++ b/gcc/alias.c @@ -1139,9 +1139,6 @@ rtx_equal_for_memref_p (rtx x, rtx y) /* Some RTL can be compared without a recursive examination. */ switch (code) { - case VALUE: - return CSELIB_VAL_PTR (x) == CSELIB_VAL_PTR (y); - case REG: return REGNO (x) == REGNO (y); @@ -1151,6 +1148,7 @@ rtx_equal_for_memref_p (rtx x, rtx y) case SYMBOL_REF: return XSTR (x, 0) == XSTR (y, 0); + case VALUE: case CONST_INT: case CONST_DOUBLE: /* There's no need to compare the contents of CONST_DOUBLEs or @@ -1325,6 +1323,8 @@ find_base_term (rtx x) case VALUE: val = CSELIB_VAL_PTR (x); + if (!val) + return 0; for (l = val->locs; l; l = l->next) if ((x = find_base_term (l->loc)) != 0) return x; @@ -1502,14 +1502,17 @@ get_addr (rtx x) if (GET_CODE (x) != VALUE) return x; v = CSELIB_VAL_PTR (x); - for (l = v->locs; l; l = l->next) - if (CONSTANT_P (l->loc)) - return l->loc; - for (l = v->locs; l; l = l->next) - if (GET_CODE (l->loc) != REG && GET_CODE (l->loc) != MEM) - return l->loc; - if (v->locs) - return v->locs->loc; + if (v) + { + for (l = v->locs; l; l = l->next) + if (CONSTANT_P (l->loc)) + return l->loc; + for (l = v->locs; l; l = l->next) + if (GET_CODE (l->loc) != REG && GET_CODE (l->loc) != MEM) + return l->loc; + if (v->locs) + return v->locs->loc; + } return x; }