This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Unreachable code in reload.c


reload.c, function decompose, line 2355 (CVS HEAD version):

     val.start = true_regnum (x);
      if (val.start < 0)
        {
          /* A pseudo with no hard reg.  */
          val.start = REGNO (x);
          val.end = val.start + 1;
        }
      else
        /* A hard reg.  */
        val.end = val.start + hard_regno_nregs[val.start][GET_MODE (x)];


The then-part of the if statement can never be reached, because
true_regnum returns
* a register number, which is >0, if the x is an hard register.
* a register number >0, if x is a pseudo register and reg_renumber[REGNO(x)]>0
* else REGNO(x), which is >0

So the else case is used for every kind of register, which also means
that not renumbered pseudo registers cause an access over the array
bounds of hard_regno_nregs. (I don't know, if decompose can be called
with a pseudo-register).

mfg Martin Kögler
e9925248@stud4.tuwien.ac.at


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]