summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Stephenson <p.stephenson@samsung.com>2022-12-12 10:30:13 +0000
committerPeter Stephenson <p.stephenson@samsung.com>2022-12-12 10:30:13 +0000
commit67d4bf5bb936a5b95160410b4790f2bf4113c75f (patch)
tree5fefa872c290a8990f42d0a1a510669b2e2cd9c0
parent14559421e2a054f9b09d6fa1971158a5e7e162a6 (diff)
downloadzsh-67d4bf5bb936a5b95160410b4790f2bf4113c75f.tar.gz
zsh-67d4bf5bb936a5b95160410b4790f2bf4113c75f.zip
51134: ! return doesn't change the return status
-rw-r--r--Src/exec.c2
-rw-r--r--Test/A01grammar.ztst12
2 files changed, 13 insertions, 1 deletions
diff --git a/Src/exec.c b/Src/exec.c
index a1059af5e..7001fd615 100644
--- a/Src/exec.c
+++ b/Src/exec.c
@@ -1961,7 +1961,7 @@ execpline(Estate state, wordcode slcode, int how, int last1)
}
else
unqueue_signals();
- if ((slflags & WC_SUBLIST_NOT) && !errflag)
+ if ((slflags & WC_SUBLIST_NOT) && !errflag && !retflag)
lastval = !lastval;
}
if (!pline_level)
diff --git a/Test/A01grammar.ztst b/Test/A01grammar.ztst
index 0312fe94e..b3aea1055 100644
--- a/Test/A01grammar.ztst
+++ b/Test/A01grammar.ztst
@@ -970,3 +970,15 @@ F:its expectations.
0:Non-interactive shell command input is line buffered
>Value is first
>Value is second
+
+ fn() {
+ ! false
+ }
+0:! inverts the status of implicit return
+
+ fn () {
+ false
+ ! return
+ }
+ fn
+1:! does not affect return status of explicit return