Re: Bison 3.5.92 on AIX

Akim Demaille <[email protected]>
Newsgroups gmane.comp.parsers.bison.bugs
Message-ID <[email protected]>

> Le 3 mai 2020 à 18:11, Akim Demaille <[email protected]> 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 <[email protected]>
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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.