diff options
author | Barton E. Schaefer <schaefer@zsh.org> | 2015-10-03 22:11:09 -0700 |
---|---|---|
committer | Barton E. Schaefer <schaefer@zsh.org> | 2015-10-03 22:11:09 -0700 |
commit | cb26e11c70f95c72e300e1f4f16b33e4e5f54d21 (patch) | |
tree | 96a618762650ca2675459d40a67150ac7a31d006 | |
parent | b581c3fece76c87ed86ae9fc704d0fcf208a79d3 (diff) | |
download | zsh-cb26e11c70f95c72e300e1f4f16b33e4e5f54d21.tar.gz zsh-cb26e11c70f95c72e300e1f4f16b33e4e5f54d21.tar.xz zsh-cb26e11c70f95c72e300e1f4f16b33e4e5f54d21.zip |
unposted: back out 36707, add test case for 36766
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | Src/exec.c | 2 | ||||
-rw-r--r-- | Src/loop.c | 8 | ||||
-rw-r--r-- | Test/C03traps.ztst | 14 |
4 files changed, 21 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog index a5a235389..aa2253522 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2015-10-03 Barton E. Schaefer <schaefer@zsh.org> + * unposted (cf. 36696): Test/C03traps.ztst: test case for 36766 + + * unposted: Src/exec.c, Src/loop.c: back out 36707, fixed by 36766 + * 36766: Src/exec.c: fix incorrect reset of noerrexit during "if" conditions diff --git a/Src/exec.c b/Src/exec.c index 235faf3ba..bcc8065a2 100644 --- a/Src/exec.c +++ b/Src/exec.c @@ -1409,7 +1409,7 @@ sublist_done: exit(lastval); } if (errreturn) { - retflag = 2; + retflag = 1; breaks = loops; } } diff --git a/Src/loop.c b/Src/loop.c index 7d1528efe..4def9b652 100644 --- a/Src/loop.c +++ b/Src/loop.c @@ -552,12 +552,8 @@ execif(Estate state, int do_exec) run = 1; break; } - if (retflag) { - if (retflag == 2) - retflag = 0; /* Never ERR_RETURN here */ - else - break; - } + if (retflag) + break; s = 1; state->pc = next; } diff --git a/Test/C03traps.ztst b/Test/C03traps.ztst index d179dc46d..4b2843a47 100644 --- a/Test/C03traps.ztst +++ b/Test/C03traps.ztst @@ -450,6 +450,20 @@ fn 1:ERRRETURN in "else" branch (regression test) + $ZTST_testdir/../Src/zsh -f =(<<<" + if false; then + : + else + if [[ -n '' ]]; then + a=2 + fi + print Yes + fi + ") +0:ERRRETURN when false "if" is the first statement in an "else" (regression) +>Yes +F:Must be tested with a top-level script rather than source or function + %clean rm -f TRAPEXIT |