File tree Expand file tree Collapse file tree 2 files changed +24
-1
lines changed Expand file tree Collapse file tree 2 files changed +24
-1
lines changed Original file line number Diff line number Diff line change @@ -2886,6 +2886,8 @@ PP(pp_return)
28862886 if (CxTYPE (& cxstack [i ]) == CXt_DEFER )
28872887 /* diag_listed_as: Can't "%s" out of a "defer" block */
28882888 /* diag_listed_as: Can't "%s" out of a "finally" block */
2889+ /* GH 23948: probably not reachable from test suite, but
2890+ * possibly from XS code; retain */
28892891 croak ("Can't \"%s\" out of a \"%s\" block" ,
28902892 "return" , S_defer_blockname (& cxstack [i ]));
28912893 }
Original file line number Diff line number Diff line change 66 set_up_inc(' ../lib' );
77}
88
9- plan 29 ;
9+ plan 31 ;
1010
1111use feature ' defer' ;
1212no warnings ' experimental::defer' ;
@@ -300,3 +300,24 @@ no warnings 'experimental::defer';
300300
301301 is($ok , " ok" , ' eval{die} inside defer does not stop runloop' );
302302}
303+
304+ # [GH #23948]
305+ {
306+ use warnings;
307+ no warnings ' experimental' ;
308+
309+ my @warnings ;
310+ local $SIG {__WARN__ } = sub { push @warnings , " @_ " };
311+
312+ my $err = ' ' ;
313+ for (1) {
314+ defer {
315+ eval ' last' ; $err = $@ ; chomp $err ;
316+ }
317+ }
318+ like($warnings [0], qr / Exiting eval via last at/ , " Got expected warning" );
319+ like($err ,
320+ qr / Can't "last" out of a "defer" block at \( eval \d +\) line 1\. / ,
321+ " got expected exception" );
322+ }
323+
You can’t perform that action at this time.
0 commit comments