fish-shell/tests/checks/return.fish
Mahmoud Al-Qudsi 3ebfba7f5b Test return builtin doesn't map negative numbers to zero
Prior to 1811a2d, the return value for negative return codes was UB and I'd
witnessed both expected cases like -256 mapping to a $status of 0 and unexpected
cases like a return value of -1 mapping to a $status of 0. As such, this doesn't
test just one fixed return value but the entire range from negative multiples of
256 all the way down (rather, up!) to -1.
2022-09-25 12:37:10 -05:00

35 lines
660 B
Fish

#RUN: %fish -C 'set -l fish %fish' %s
# Some tests of the "return" builtin.
$fish -c 'return 5'
echo $status
# CHECK: 5
$fish -c 'exit 5'
echo $status
# CHECK: 5
$fish -c 'echo foo; return 2; echo bar'
# CHECK: foo
# but not bar
echo $status
# CHECK: 2
$fish -ic 'echo interactive-foo; return 69; echo interactive-bar'
# CHECK: interactive-foo
# but not bar
echo $status
# CHECK: 69
# Verify negative return values don't cause UB and never map to 0
function empty_return
return $argv[1]
end
for i in (seq -550 -1)
empty_return $i
if test $status -eq 0
echo returning $i from a fish script maps to a $status of 0!
end
end
# CHECK: