diff options
author | Nathan Sidwell <nathan@codesourcery.com> | 2004-03-18 09:19:20 +0000 |
---|---|---|
committer | Nathan Sidwell <nathan@codesourcery.com> | 2004-03-18 09:19:20 +0000 |
commit | 59db3fe498099d7b635f1415e8254457d3e4b884 (patch) | |
tree | 90dc7ef8efe0665d8937e485e0f55e20aedd9c1b | |
parent | bb8e5921b3d50ff419e908d349ac2acd7a8c4c52 (diff) | |
download | binutils-redhat-59db3fe498099d7b635f1415e8254457d3e4b884.tar.gz |
* expr.c (operand): Reject ++ and --.
(operator): Likewise.
-rw-r--r-- | gas/ChangeLog | 5 | ||||
-rw-r--r-- | gas/expr.c | 15 |
2 files changed, 20 insertions, 0 deletions
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 <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. 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]) { |