diff options
author | John David Anglin <dave.anglin@nrc-cnrc.gc.ca> | 2004-12-14 22:35:48 +0000 |
---|---|---|
committer | John David Anglin <danglin@gcc.gnu.org> | 2004-12-14 22:35:48 +0000 |
commit | 6af713e46c072179890ac797ed7fa80801460165 (patch) | |
tree | 3931bccc755e947f5a01f68eac4ca129d8135689 /gcc | |
parent | cf77e601e577e8e082487c08f72e0f4e4925f6af (diff) | |
download | gcc-6af713e46c072179890ac797ed7fa80801460165.zip gcc-6af713e46c072179890ac797ed7fa80801460165.tar.gz gcc-6af713e46c072179890ac797ed7fa80801460165.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/pa/pa.h | 25 |
2 files changed, 22 insertions, 8 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index edb43c6..93bb229 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2004-12-14 John David Anglin <dave.anglin@nrc-cnrc.gc.ca> + + * 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 <sje@cup.hp.com> * 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 e5c30b2..0ed4714 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. |