]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
caller-save.c (reg_save_code): After HARD_REGNO_MODE_OK check fails...
authorJoern Rennecke <amylaar@spamcop.net>
Mon, 8 Nov 2010 15:07:32 +0000 (15:07 +0000)
committerJoern Rennecke <amylaar@gcc.gnu.org>
Mon, 8 Nov 2010 15:07:32 +0000 (15:07 +0000)
* caller-save.c (reg_save_code): After HARD_REGNO_MODE_OK check fails,
assert that REG is a hard register number before using it as an index.

From-SVN: r166434

gcc/ChangeLog
gcc/caller-save.c

index 963cfe0f7894cfa1336ec2462b73b39db64165fc..bd2529cda77b14de8064bf2815cec83a5dda59c3 100644 (file)
@@ -1,3 +1,8 @@
+2010-11-08  Joern Rennecke  <amylaar@spamcop.net>
+
+       * caller-save.c (reg_save_code): After HARD_REGNO_MODE_OK check fails,
+       assert that REG is a hard register number before using it as an index.
+
 2010-11-08  Eric Botcazou  <ebotcazou@adacore.com>
 
        PR target/46208
index 9ca8592bf34c465eeba22925bba875eaa7715bfb..e10681ce527a172c81465c58984408eccd657340 100644 (file)
@@ -116,11 +116,15 @@ reg_save_code (int reg, enum machine_mode mode)
   if (cached_reg_save_code[reg][mode])
      return cached_reg_save_code[reg][mode];
   if (!HARD_REGNO_MODE_OK (reg, mode))
-     {
-       cached_reg_save_code[reg][mode] = -1;
-       cached_reg_restore_code[reg][mode] = -1;
-       return -1;
-     }
+    {
+      /* Depending on how HARD_REGNO_MODE_OK is defined, range propagation
+        might deduce here that reg >= FIRST_PSEUDO_REGISTER.  So the assert
+        below silences a warning.  */
+      gcc_assert (reg < FIRST_PSEUDO_REGISTER);
+      cached_reg_save_code[reg][mode] = -1;
+      cached_reg_restore_code[reg][mode] = -1;
+      return -1;
+    }
 
   /* Update the register number and modes of the register
      and memory operand.  */