Skip to content

Commit aca30e5

Browse files
committed
lib/dumpvar.pl: replace 'while .. each' with 'for'
This eliminates the warning reported in GH #23663 when you use 'X' or 'V main' in the Perl debugger. Add tests for 'X' and 'V main' to demonstrate that when loading they no longer warn about undefined behavior. Update MANIFEST. Fixes: GH #23663.
1 parent 8dc2f2f commit aca30e5

File tree

4 files changed

+47
-1
lines changed

4 files changed

+47
-1
lines changed

MANIFEST

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5451,6 +5451,7 @@ lib/perl5db/t/gh-17660 Tests for the Perl debugger
54515451
lib/perl5db/t/gh-17661 Tests for the Perl debugger
54525452
lib/perl5db/t/gh-17661b Tests for the Perl debugger
54535453
lib/perl5db/t/gh-21350 Tests for the Perl debugger
5454+
lib/perl5db/t/gh-23663 Tests for the Perl debugger
54545455
lib/perl5db/t/load-modules Tests for the Perl debugger
54555456
lib/perl5db/t/lsub-n Test script used by perl5db.t
54565457
lib/perl5db/t/lvalue-bug Tests for the Perl debugger

lib/dumpvar.pl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -482,7 +482,8 @@ sub main::dumpvar {
482482
local $TotalStrings = 0;
483483
local $Strings = 0;
484484
local $CompleteTotal = 0;
485-
while (($key,$val) = each(%stab)) {
485+
for my $key (keys %stab) {
486+
my $val = $stab{$key};
486487
return if $DB::signal;
487488
next if @vars && !grep( matchvar($key, $_), @vars );
488489
if ($usageOnly) {

lib/perl5db.t

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3662,6 +3662,46 @@ EOS
36623662
$wrapper->contents_like(qr/print "2\\n"/, "break immediately after defining problem");
36633663
}
36643664

3665+
{
3666+
# gh #23663 (variant 1)
3667+
my $wrapper = DebugWrap->new(
3668+
{
3669+
cmds =>
3670+
[
3671+
'b 4',
3672+
'X',
3673+
'c',
3674+
'q',
3675+
],
3676+
prog => '../lib/perl5db/t/gh-23663',
3677+
}
3678+
);
3679+
3680+
$wrapper->contents_unlike(
3681+
qr/Use of each\(\) on hash after insertion without resetting hash iterator results in undefined behavior/,
3682+
q/gh-23663: 'X' command does not warn about undefined behavior/,
3683+
);
3684+
3685+
# gh #23663 (variant 2)
3686+
$wrapper = DebugWrap->new(
3687+
{
3688+
cmds =>
3689+
[
3690+
'b 4',
3691+
'v main',
3692+
'c',
3693+
'q',
3694+
],
3695+
prog => '../lib/perl5db/t/gh-23663',
3696+
}
3697+
);
3698+
3699+
$wrapper->contents_unlike(
3700+
qr/Use of each\(\) on hash after insertion without resetting hash iterator results in undefined behavior/,
3701+
q/gh-23663: 'V main' command does not warn about undefined behavior/,
3702+
);
3703+
}
3704+
36653705
done_testing();
36663706

36673707
END {

lib/perl5db/t/gh-23663

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# Issue: https://github.com/Perl/perl5/issues/23663
2+
# Pull Request: https://github.com/Perl/perl5/issues/23669
3+
4+
my $foo = "bar";

0 commit comments

Comments
 (0)