Prevent out-of-bounds array access in reload.
authorMartin Koegler <mkoegler@auto.tuwien.ac.at>
Thu, 28 Apr 2005 20:36:56 +0000 (22:36 +0200)
committerJim Wilson <wilson@gcc.gnu.org>
Thu, 28 Apr 2005 20:36:56 +0000 (13:36 -0700)
PR rtl-optimization/18877
* reload.c (decompose) <case REG, case SUBREG>: Handle pseudo reg
number in val.start.

From-SVN: r98938

gcc/ChangeLog
gcc/reload.c

index 4ce81e094bf49bb3d0188f204a2bbf676d4b2219..15f1932b320631cdd796f74bef6c9f2df25328bd 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
index 394a43014b62a7765bed08b58a4b55d0fdb0febb..9f10321d9c6b76c34026faf3f81ed31289079e37 100644 (file)
@@ -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.  */