diff --git a/Src/loop.c b/Src/loop.c index db5b3e097..7c3e04b8a 100644 --- a/Src/loop.c +++ b/Src/loop.c @@ -793,6 +793,7 @@ exectry(Estate state, int do_exec) cmdpop(); popheap(); state->pc = end; + this_noerrexit = 1; return endval; } diff --git a/Test/C03traps.ztst b/Test/C03traps.ztst index a7a040d70..4719dfd57 100644 --- a/Test/C03traps.ztst +++ b/Test/C03traps.ztst @@ -721,22 +721,19 @@ F:Must be tested with a top-level script rather than source or function >Good (setopt err_exit - for x in y; do - false && true - done + false && true print OK ) -0:ERR_EXIT not triggered by status 1 at end of for +0:ERR_EXIT not triggered by "false && true" >OK (setopt err_exit - integer x=0 - while (( ! x++ )); do + for x in y; do false && true done print OK ) -0:ERR_EXIT not triggered by status 1 at end of while +0:ERR_EXIT not triggered by status 1 at end of for >OK (setopt err_exit @@ -755,6 +752,31 @@ F:Must be tested with a top-level script rather than source or function print OK ) 0:ERR_EXIT not triggered by status 1 at end of if +>OK + + (setopt err_exit + loop=true + while print COND; $loop; do + loop=false + false && true + done + print OK + ) +0:ERR_EXIT not triggered by status 1 at end of while +>COND +>COND +>OK + + (setopt err_exit + { + false && true + } always { + print ALWAYS + } + print OK + ) +0:ERR_EXIT not triggered by status 1 at end of always +>ALWAYS >OK (setopt err_exit