* expr.c (operand): Reject ++ and --.
authorNathan Sidwell <nathan@codesourcery.com>
Thu, 18 Mar 2004 09:19:20 +0000 (09:19 +0000)
committerNathan Sidwell <nathan@codesourcery.com>
Thu, 18 Mar 2004 09:19:20 +0000 (09:19 +0000)
(operator): Likewise.

gas/ChangeLog
gas/expr.c

index 1e8424b86c7a983562958d062a65ae750215028b..3f08a95eb08d41f56451c0b6b1f5088ba19fd65b 100644 (file)
@@ -1,3 +1,8 @@
+2004-03-18  Nathan Sidwell  <nathan@codesourcery.com>
+
+       * expr.c (operand): Reject ++ and --.
+       (operator): Likewise.
+
 2004-03-17  Kaz Kojima  <kkojima@rr.iij4u.or.jp>
 
        * config/tc-sh.c: Include dw2gencfi.h.
index a18d6d87c0dfadc708226583a6b16150ae1a7ffb..b7cc1b8cacb8a7de564fb0980fd51d6554d94df6 100644 (file)
@@ -1021,6 +1021,9 @@ operand (expressionS *expressionP)
       break;
 
     case '+':
+      /* Do not accept ++e as +(+e) */
+      if (input_line_pointer[1] == '+')
+       goto target_op;
       (void) operand (expressionP);
       break;
 
@@ -1038,6 +1041,10 @@ operand (expressionS *expressionP)
     case '!':
     case '-':
       {
+        /* Do not accept --e as -(-e) */
+       if (c == '-' && input_line_pointer[1] == '-')
+         goto target_op;
+       
        operand (expressionP);
        if (expressionP->X_op == O_constant)
          {
@@ -1289,6 +1296,7 @@ operand (expressionS *expressionP)
        }
       else
        {
+       target_op:
          /* Let the target try to parse it.  Success is indicated by changing
             the X_op field to something other than O_absent and pointing
             input_line_pointer past the expression.  If it can't parse the
@@ -1541,6 +1549,13 @@ operator (int *num_chars)
     default:
       return op_encoding[c];
 
+    case '+':
+    case '-':
+      /* Do not allow a++b and a--b to be a + (+b) and a - (-b) */
+      if (input_line_pointer[1] != c)
+       return op_encoding[c];
+      return O_illegal;
+
     case '<':
       switch (input_line_pointer[1])
        {