From: John David Anglin Date: Tue, 14 Dec 2004 22:35:48 +0000 (+0000) Subject: pa.h (REGNO_OK_FOR_INDEX_P, [...]): Check register number and that reg_renumber is... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=6af713e46c072179890ac797ed7fa80801460165;p=gcc.git pa.h (REGNO_OK_FOR_INDEX_P, [...]): Check register number and that reg_renumber is nonzero before using it. * pa.h (REGNO_OK_FOR_INDEX_P, REGNO_OK_FOR_BASE_P, REGNO_OK_FOR_FP_P): Check register number and that reg_renumber is nonzero before using it. From-SVN: r92164 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index edb43c6fc74..93bb229bfc5 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2004-12-14 John David Anglin + + * pa.h (REGNO_OK_FOR_INDEX_P, REGNO_OK_FOR_BASE_P, REGNO_OK_FOR_FP_P): + Check register number and that reg_renumber is nonzero before using it. + 2004-12-14 Steve Ellcey * doc/invoke.texi (IA-64 options): Add existing options that diff --git a/gcc/config/pa/pa.h b/gcc/config/pa/pa.h index e5c30b2c147..0ed47149f44 100644 --- a/gcc/config/pa/pa.h +++ b/gcc/config/pa/pa.h @@ -1172,18 +1172,27 @@ extern int may_call_alloca; /* Macros to check register numbers against specific register classes. */ -/* These assume that REGNO is a hard or pseudo reg number. - They give nonzero only if REGNO is a hard reg of the suitable class +/* The following macros assume that X is a hard or pseudo reg number. + They give nonzero only if X is a hard reg of the suitable class or a pseudo reg currently allocated to a suitable hard reg. Since they use reg_renumber, they are safe only once reg_renumber has been allocated, which happens in local-alloc.c. */ -#define REGNO_OK_FOR_INDEX_P(REGNO) \ - ((REGNO) && ((REGNO) < 32 || (unsigned) reg_renumber[REGNO] < 32)) -#define REGNO_OK_FOR_BASE_P(REGNO) \ - ((REGNO) && ((REGNO) < 32 || (unsigned) reg_renumber[REGNO] < 32)) -#define REGNO_OK_FOR_FP_P(REGNO) \ - (FP_REGNO_P (REGNO) || FP_REGNO_P (reg_renumber[REGNO])) +#define REGNO_OK_FOR_INDEX_P(X) \ + ((X) && ((X) < 32 \ + || (X >= FIRST_PSEUDO_REGISTER \ + && reg_renumber \ + && (unsigned) reg_renumber[X] < 32))) +#define REGNO_OK_FOR_BASE_P(X) \ + ((X) && ((X) < 32 \ + || (X >= FIRST_PSEUDO_REGISTER \ + && reg_renumber \ + && (unsigned) reg_renumber[X] < 32))) +#define REGNO_OK_FOR_FP_P(X) \ + (FP_REGNO_P (X) \ + || (X >= FIRST_PSEUDO_REGISTER \ + && reg_renumber \ + && FP_REGNO_P (reg_renumber[X]))) /* Now macros that check whether X is a register and also, strictly, whether it is in a specified class.