aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Koegler <mkoegler@auto.tuwien.ac.at>2005-04-28 22:36:56 +0200
committerJim Wilson <wilson@gcc.gnu.org>2005-04-28 13:36:56 -0700
commit67468e8eda640eb0cd6c64186533ad412137512f (patch)
treef8e8997a5dfef683c822f3196b2a81e167c3a825
parentb1079a6189a278abe0766971ea9c3c5b95dc57c1 (diff)
downloadgcc-67468e8eda640eb0cd6c64186533ad412137512f.zip
gcc-67468e8eda640eb0cd6c64186533ad412137512f.tar.gz
gcc-67468e8eda640eb0cd6c64186533ad412137512f.tar.bz2
Prevent out-of-bounds array access in reload.
PR rtl-optimization/18877 * reload.c (decompose) <case REG, case SUBREG>: Handle pseudo reg number in val.start. From-SVN: r98938
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/reload.c4
2 files changed, 8 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 4ce81e0..15f1932 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2005-04-28 Martin Koegler <mkoegler@auto.tuwien.ac.at>
+
+ PR rtl-optimization/18877
+ * reload.c (decompose) <case REG, case SUBREG>: Handle pseudo reg
+ number in val.start.
+
2005-04-28 David Edelsohn <edelsohn@gnu.org>
PR target/20813
diff --git a/gcc/reload.c b/gcc/reload.c
index 394a430..9f10321 100644
--- a/gcc/reload.c
+++ b/gcc/reload.c
@@ -2389,7 +2389,7 @@ decompose (rtx x)
case REG:
val.reg_flag = 1;
val.start = true_regnum (x);
- if (val.start < 0)
+ if (val.start < 0 || val.start >= FIRST_PSEUDO_REGISTER)
{
/* A pseudo with no hard reg. */
val.start = REGNO (x);
@@ -2406,7 +2406,7 @@ decompose (rtx x)
return decompose (SUBREG_REG (x));
val.reg_flag = 1;
val.start = true_regnum (x);
- if (val.start < 0)
+ if (val.start < 0 || val.start >= FIRST_PSEUDO_REGISTER)
return decompose (SUBREG_REG (x));
else
/* A hard reg. */