diff --git a/gas/ChangeLog b/gas/ChangeLog index 1e8424b86c..3f08a95eb0 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,8 @@ +2004-03-18 Nathan Sidwell + + * expr.c (operand): Reject ++ and --. + (operator): Likewise. + 2004-03-17 Kaz Kojima * config/tc-sh.c: Include dw2gencfi.h. diff --git a/gas/expr.c b/gas/expr.c index a18d6d87c0..b7cc1b8cac 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]) {