platform-testers
[Top][All Lists]
Advanced

[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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]