regclass.c (fix_register): Add error message.
authorGavin Romig-Koch <gavin@cygnus.com>
Tue, 20 Oct 1998 08:03:37 +0000 (08:03 +0000)
committerGavin Romig-Koch <gavin@gcc.gnu.org>
Tue, 20 Oct 1998 08:03:37 +0000 (08:03 +0000)
* regclass.c (fix_register): Add error message.
* invoke.texi (-fcall-used-REG,-fcall-saved-REG): Note the
  new error message

From-SVN: r23198

gcc/ChangeLog
gcc/invoke.texi
gcc/regclass.c

index 6a6280dd84923b169ac521a0c2f232c4b1444b1b..89bdf960f98329373b6a66597a0211688bdc42bd 100644 (file)
@@ -1,3 +1,9 @@
+Tue Oct 20 10:59:02 1998  Gavin Romig-Koch  <gavin@cygnus.com>
+
+       * regclass.c (fix_register): Add error message.
+       * invoke.texi (-fcall-used-REG,-fcall-saved-REG): Note the
+         new error message.
+
 Tue Oct 20 10:12:17 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
 
        * c-decl.c (warn_missing_noreturn): New global variable.
index f6ecd648ca76ac037bdf714e29f3fcb5e6acb5d0..6bc075cdc5a8fff51ae3a4f8363bde6228342385 100644 (file)
@@ -5819,9 +5819,9 @@ clobbered by function calls.  It may be allocated for temporaries or
 variables that do not live across a call.  Functions compiled this way
 will not save and restore the register @var{reg}.
 
-Use of this flag for a register that has a fixed pervasive role in the
-machine's execution model, such as the stack pointer or frame pointer,
-will produce disastrous results.
+It is an error to used this flag with the frame pointer or stack pointer.
+Use of this flag for other registers that have fixed pervasive roles in
+the machine's execution model will produce disastrous results.
 
 This flag does not have a negative form, because it specifies a
 three-way choice.
@@ -5832,9 +5832,9 @@ functions.  It may be allocated even for temporaries or variables that
 live across a call.  Functions compiled this way will save and restore
 the register @var{reg} if they use it.
 
-Use of this flag for a register that has a fixed pervasive role in the
-machine's execution model, such as the stack pointer or frame pointer,
-will produce disastrous results.
+It is an error to used this flag with the frame pointer or stack pointer.
+Use of this flag for other registers that have fixed pervasive roles in
+the machine's execution model will produce disastrous results.
 
 A different sort of disaster will result from the use of this flag for
 a register in which function values may be returned.
index bfb5fe653454ffadd1cd4509cfa78408308dd346..73960c80a99c16a3408ee378b051a85dd20be0e2 100644 (file)
@@ -574,8 +574,27 @@ fix_register (name, fixed, call_used)
 
   if ((i = decode_reg_name (name)) >= 0)
     {
-      fixed_regs[i] = fixed;
-      call_used_regs[i] = call_used;
+      if ((i == STACK_POINTER_REGNUM
+#ifdef HARD_FRAME_POINTER_REGNUM
+          || i == HARD_FRAME_POINTER_REGNUM
+#else
+          || i == FRAME_POINTER_REGNUM
+#endif
+          )
+         && (fixed == 0 || call_used == 0))
+       {
+         static char* what_option[2][2] = {
+           "call-saved", "call-used", 
+           "no-such-option", "fixed" };
+         
+         error ("can't use '%s' as a %s register", name, 
+                what_option[fixed][call_used]);
+       }
+      else
+       {
+         fixed_regs[i] = fixed;
+         call_used_regs[i] = call_used;
+       }
     }
   else
     {