In perl.git, the branch blead has been updated <https://perl5.git.perl.org/perl.git/commitdiff/2773b4f50f991900e38d33daace2b9c6a0902c6a?hp=256dda502eca71f547885c73901e8e8b42d47174>
- Log ----------------------------------------------------------------- commit 2773b4f50f991900e38d33daace2b9c6a0902c6a Author: Tony Cook <t...@develop-help.com> Date: Thu Jul 4 15:02:46 2019 +1000 Revert "postpone perl_parse() exit(0) bugfix" This reverts commit 857320cbf85e762add18885ae8a197b5e0c21b69, re-instating the [perl #2754] fix, which was reverted in late 2017 to allow Module::Install based distributions to update or re-work per [perl #132577]. # Conflicts: # t/op/blocks.t ----------------------------------------------------------------------- Summary of changes: perl.c | 27 ++++++++------------------- t/op/blocks.t | 12 ++++++------ 2 files changed, 14 insertions(+), 25 deletions(-) diff --git a/perl.c b/perl.c index e642f2e76d..a84a0a955b 100644 --- a/perl.c +++ b/perl.c @@ -1624,16 +1624,13 @@ For historical reasons, the non-zero return value also attempts to be a suitable value to pass to the C library function C<exit> (or to return from C<main>), to serve as an exit code indicating the nature of the way initialisation terminated. However, this isn't portable, -due to differing exit code conventions. A historical bug is preserved -for the time being: if the Perl built-in C<exit> is called during this -function's execution, with a type of exit entailing a zero exit code -under the host operating system's conventions, then this function -returns zero rather than a non-zero value. This bug, [perl #2754], -leads to C<perl_run> being called (and therefore C<INIT> blocks and the -main program running) despite a call to C<exit>. It has been preserved -because a popular module-installing module has come to rely on it and -needs time to be fixed. This issue is [perl #132577], and the original -bug is due to be fixed in Perl 5.30. +due to differing exit code conventions. An attempt is made to return +an exit code of the type required by the host operating system, but +because it is constrained to be non-zero, it is not necessarily possible +to indicate every type of exit. It is only reliable on Unix, where a +zero exit code can be augmented with a set bit that will be ignored. +In any case, this function is not the correct place to acquire an exit +code: one should get that from L</perl_destruct>. =cut */ @@ -1842,15 +1839,7 @@ perl_parse(pTHXx_ XSINIT_t xsinit, int argc, char **argv, char **env) call_list(oldscope, PL_checkav); } ret = STATUS_EXIT; - if (ret == 0) { - /* - * At this point we should do - * ret = 0x100; - * to avoid [perl #2754], but that bugfix has been postponed - * because of the Module::Install breakage it causes - * [perl #132577]. - */ - } + if (ret == 0) ret = 0x100; break; case 3: PerlIO_printf(Perl_error_log, "panic: top_env\n"); diff --git a/t/op/blocks.t b/t/op/blocks.t index 1fb369a1a1..ea6ca4d144 100644 --- a/t/op/blocks.t +++ b/t/op/blocks.t @@ -167,23 +167,23 @@ SKIP: { skip "VMS doesn't have the perl #2754 bug", 3 if $^O eq 'VMS'; fresh_perl_is( "$testblocks BEGIN { exit 0; }", - "begin\nunitcheck\ncheck\ninit\nend", + "begin\nunitcheck\ncheck\nend", {}, - "BEGIN{exit 0} doesn't exit yet" + "BEGIN{exit 0} should exit" ); fresh_perl_is( "$testblocks UNITCHECK { exit 0; }", - "begin\nunitcheck\ncheck\ninit\nmain\nend", + "begin\nunitcheck\ncheck\nend", {}, - "UNITCHECK{exit 0} doesn't exit yet" + "UNITCHECK{exit 0} should exit" ); fresh_perl_is( "$testblocks CHECK { exit 0; }", - "begin\nunitcheck\ncheck\ninit\nmain\nend", + "begin\nunitcheck\ncheck\nend", {}, - "CHECK{exit 0} doesn't exit yet" + "CHECK{exit 0} should exit" ); } -- Perl5 Master Repository