summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bin/sh/arith_yylex.c4
-rw-r--r--tools/regression/bin/sh/expansion/arith13.06
2 files changed, 10 insertions, 0 deletions
diff --git a/bin/sh/arith_yylex.c b/bin/sh/arith_yylex.c
index f6eebdb..ad08184 100644
--- a/bin/sh/arith_yylex.c
+++ b/bin/sh/arith_yylex.c
@@ -218,9 +218,13 @@ checkeqcur:
value += ARITH_REM - '%';
goto checkeq;
case '+':
+ if (buf[1] == '+')
+ return ARITH_BAD;
value += ARITH_ADD - '+';
goto checkeq;
case '-':
+ if (buf[1] == '-')
+ return ARITH_BAD;
value += ARITH_SUB - '-';
goto checkeq;
case '~':
diff --git a/tools/regression/bin/sh/expansion/arith13.0 b/tools/regression/bin/sh/expansion/arith13.0
new file mode 100644
index 0000000..207e488
--- /dev/null
+++ b/tools/regression/bin/sh/expansion/arith13.0
@@ -0,0 +1,6 @@
+# $FreeBSD$
+# Pre-increment and pre-decrement in arithmetic expansion are not in POSIX.
+# Require either an error or a correct implementation.
+
+! (eval 'x=4; [ $((++x)) != 5 ] || [ $x != 5 ]') 2>/dev/null &&
+! (eval 'x=2; [ $((--x)) != 1 ] || [ $x != 1 ]') 2>/dev/null
OpenPOWER on IntegriCloud