From 3e4caed2b120cd3930d19c96fc5761f9254946c5 Mon Sep 17 00:00:00 2001 From: Nathan Sidwell Date: Thu, 18 Mar 2004 09:19:20 +0000 Subject: * expr.c (operand): Reject ++ and --. (operator): Likewise. --- gas/expr.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'gas/expr.c') diff --git a/gas/expr.c b/gas/expr.c index a18d6d8..b7cc1b8 100644 --- a/gas/expr.c +++ b/gas/expr.c @@ -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]) { -- cgit v1.1