OSDN Git Service

* regclass.c (fix_register): Add error message.
authorgavin <gavin@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 20 Oct 1998 08:03:37 +0000 (08:03 +0000)
committergavin <gavin@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 20 Oct 1998 08:03:37 +0000 (08:03 +0000)
* invoke.texi (-fcall-used-REG,-fcall-saved-REG): Note the
  new error message

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

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

index 6a6280d..89bdf96 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 f6ecd64..6bc075c 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 bfb5fe6..73960c8 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
     {