OSDN Git Service

Prevent out-of-bounds array access in reload.
authorwilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 28 Apr 2005 20:36:56 +0000 (20:36 +0000)
committerwilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 28 Apr 2005 20:36:56 +0000 (20:36 +0000)
PR rtl-optimization/18877
* reload.c (decompose) <case REG, case SUBREG>: Handle pseudo reg
number in val.start.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@98938 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/reload.c

index 4ce81e0..15f1932 100644 (file)
@@ -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
 2005-04-28  David Edelsohn  <edelsohn@gnu.org>
 
        PR target/20813
index 394a430..9f10321 100644 (file)
@@ -2389,7 +2389,7 @@ decompose (rtx x)
     case REG:
       val.reg_flag = 1;
       val.start = true_regnum (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);
        {
          /* 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);
        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.  */
        return decompose (SUBREG_REG (x));
       else
        /* A hard reg.  */