OSDN Git Service

* arm.c (arm_print_operand case 'S'): Validate that the operand is
authorrearnsha <rearnsha@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 31 May 2006 13:39:48 +0000 (13:39 +0000)
committerrearnsha <rearnsha@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 31 May 2006 13:39:48 +0000 (13:39 +0000)
a shift operand before calling shift_op.  Avoid redundant call of
shift_op.

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

gcc/ChangeLog
gcc/config/arm/arm.c

index 04a8373..170bfa5 100644 (file)
@@ -1,3 +1,9 @@
+2006-05-31  Richard Earnshaw  <richard.earnshaw@arm.com>
+
+       * arm.c (arm_print_operand case 'S'): Validate that the operand is
+       a shift operand before calling shift_op.  Avoid redundant call of
+       shift_op.
+
 2006-05-30  Naveen.H.S  <naveenh@kpitcummins.com>
            DJ Delorie  <dj@redhat.com>
 
index a26222a..a36c0d7 100644 (file)
@@ -11013,11 +11013,19 @@ arm_print_operand (FILE *stream, rtx x, int code)
     case 'S':
       {
        HOST_WIDE_INT val;
-       const char * shift = shift_op (x, &val);
+       const char *shift;
+
+       if (!shift_operator (x, SImode))
+         {
+           output_operand_lossage ("invalid shift operand");
+           break;
+         }
+
+       shift = shift_op (x, &val);
 
        if (shift)
          {
-           fprintf (stream, ", %s ", shift_op (x, &val));
+           fprintf (stream, ", %s ", shift);
            if (val == -1)
              arm_print_operand (stream, XEXP (x, 1), 0);
            else