[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [platform-testers] Bison 3.5.92 on AIX
From: |
Akim Demaille |
Subject: |
Re: [platform-testers] Bison 3.5.92 on AIX |
Date: |
Tue, 5 May 2020 08:26:01 +0200 |
> Le 3 mai 2020 à 18:11, Akim Demaille <address@hidden> a écrit :
>
> +if diff perfect effective >/dev/null 2>&1; then
> + # Alles ist gut.
> +elif diff ok effective >/dev/null 2>&1; then
This is wrong, the shell grammar does not accept empty statements
here. So bistromathic.log actually contains
examples/c/bistromathic/bistromathic.test: line 45: syntax error near
unexpected token `elif'
but the test "passes" anyway.
I'm installing this. Maybe some more portability issues in the
bistro example were hidden by this bug.
commit cb9f4cb5439adc33f877f134e87b9b2233416c17
Author: Akim Demaille <address@hidden>
Date: Tue May 5 08:08:25 2020 +0200
examples: fix handling of syntax errors
The shell grammar does not allow empty statements in then/else part of
an if, but examples/test failed to catch the syntax errors from the
script it ran. So exited with success anyway.
You would expect 'set -e' to suffice, but with bash 3.2 actually it
does not. As a matter of fact, I could find a way to have this behave
properly:
$ cat test.sh
set -e
cleanup ()
{
status=$?
echo "cleanup: $status"
exit $status
}
trap cleanup 0 1 2 13 15
. $1
s=$?
echo "test.sh: $s"
exit $s
$ cat bistro.test
if true; then
fi
$ /bin/sh ./test.sh ./bistro.test
./bistro.test: line 2: syntax error near unexpected token `fi'
cleanup: 0
$ echo $?
0
Remove the set -e (or the trap), and tada, it works... So we have to
deal with the error by hand.
* examples/test ($exit): Replace with...
($status): this.
Preserve the exit status of the test case.
* examples/c/bistromathic/bistromathic.test: Fix syntax error.
diff --git a/examples/c/bistromathic/bistromathic.test
b/examples/c/bistromathic/bistromathic.test
index 0f0b7898..3bb83b77 100755
--- a/examples/c/bistromathic/bistromathic.test
+++ b/examples/c/bistromathic/bistromathic.test
@@ -43,6 +43,7 @@ echo '0' | prog >effective
if diff perfect effective >/dev/null 2>&1; then
# Alles ist gut.
+ strip_prompt=false
elif diff ok effective >/dev/null 2>&1; then
strip_prompt=true
else
diff --git a/examples/test b/examples/test
index 3bf6edd4..c80e919e 100755
--- a/examples/test
+++ b/examples/test
@@ -25,7 +25,7 @@ medir=$(dirname "$1" | sed -e 's,.*examples/,,')
number=1
# Exit status of this script.
-exit=true
+status=0
# top_builddir.
cwd=$(pwd)
@@ -141,20 +141,20 @@ run ()
sed -e 's/^/ /' eff
echo "$me: diff:"
diff -u exp eff | sed -e 's/^/ /'
- exit=false
+ status=1
fi
else
echo "$me: FAIL: $number (expected status: $sta_exp, effective: $sta_eff)"
cat err_eff
- exit=false
+ status=1
fi
number=$(expr $number + 1)
}
# We have cd'd one level deeper.
case $1 in
- /*) . "$1";;
- *) . "../$1";;
+ /*) . "$1" || status=2;;
+ *) . "../$1" || status=2;;
esac
-$exit
+exit $status