From 7d1877da4e6fabde8f0b5eb2f9a9f03d83e6c28d Mon Sep 17 00:00:00 2001 From: Peter Stephenson Date: Sun, 27 Aug 2017 20:28:38 +0100 Subject: 41608 (plus tests): restore ERR_EXIT before function. There was an exception to the usual ERR_EXIT pattern that causes problems when executing a function in an else branch. It seems the exception is no longer needed as the regression tests pass without it. --- ChangeLog | 5 +++++ Src/exec.c | 2 +- Test/C03traps.ztst | 35 +++++++++++++++++++++++++++++++++++ 3 files changed, 41 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 39042f8e0..307a02b86 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2017-08-27 Peter Stephenson + + * 41608 (plus tests): Src/exec.c, Test/C03traps.ztst: ERR_EXIT + behaviour restored when executing a function in body of else. + 2017-08-29 Андрей Стоцкий (_RuRo_) * 41618: Completion/Unix/Command/_todo.sh: Added some arguments diff --git a/Src/exec.c b/Src/exec.c index cd99733f1..76a6bb1a4 100644 --- a/Src/exec.c +++ b/Src/exec.c @@ -3025,7 +3025,7 @@ execcmd_exec(Estate state, Execcmd_params eparams, preargs = NULL; /* if we get this far, it is OK to pay attention to lastval again */ - if ((noerrexit & NOERREXIT_UNTIL_EXEC) && !is_shfunc) + if (noerrexit & NOERREXIT_UNTIL_EXEC) noerrexit = 0; /* Do prefork substitutions. diff --git a/Test/C03traps.ztst b/Test/C03traps.ztst index 759401225..f8a12319a 100644 --- a/Test/C03traps.ztst +++ b/Test/C03traps.ztst @@ -465,6 +465,41 @@ ) 1:ERREXIT in loop with simple commands + (set -e + f() + { + false && false + } + if false; then + : + else + # ERR_EXIT should trigger on return from function, not in function. + f + echo Fail 1 + echo Fail 2 + f + echo Fail 3 + fi) +1:ERREXIT with false from inside && within function + + (set -e + f() + { + } + if false; then + : + else + f + echo Succeed 1 + echo Succeed 2 + f + echo Succeed 3 + fi) +0:ERREXIT not triggered on empty function after false in if. +>Succeed 1 +>Succeed 2 +>Succeed 3 + fn() { emulate -L zsh setopt errreturn -- cgit 1.4.1