Skip to content

ec8fb4ca44 breaks -DDEBUGGING builds #23854

@jkeenan

Description

@jkeenan

As can be seen by these two smoke-test reports ...

Linux

FreeBSD

... commit ec8fb4c (v5.43.3-217-gec8fb4ca44) caused many test failures in builds configured with
-DDEBUGGING.

The following test files failed during make minitest on Debian Linux:

$ sh ./Configure -des -Dusedevel -DDEBUGGING && make minitest
...
Failed 26 tests out of 352, 92.61% okay.
	comp/parser.t
	io/open.t
	op/coreamp.t
	op/die.t
	op/evalbytes.t
	op/fresh_perl_utf8.t
	op/lexsub.t
	op/substr.t
	op/utf8cache.t
	op/utfhash.t
	re/pat_re_eval.t
	run/fresh_perl.t
	uni/bless.t
	uni/caller.t
	uni/goto.t
	uni/gv.t
	uni/labels.t
	uni/method.t
	uni/opcroak.t
	uni/package.t
	uni/parser.t
	uni/readline.t
	uni/select.t
	uni/stash.t
	uni/universal.t
	uni/variables.t

There were 80 test failures during make test_harness:

comp/parser.t
../dist/constant/t/utf8.t
../ext/Devel-Peek/t/Peek.t
../ext/XS-APItest/t/fetch_pad_names.t
../ext/XS-APItest/t/gv_autoload4.t
../ext/XS-APItest/t/gv_fetchmeth_autoload.t
../ext/XS-APItest/t/gv_fetchmethod_flags.t
../ext/XS-APItest/t/gv_fetchmeth.t
../ext/XS-APItest/t/labelconst.t
../ext/XS-APItest/t/svpeek.t
../ext/XS-APItest/t/valid_identifier.t
io/open.t
../lib/B/Deparse.t
lib/croak.t
../lib/strict.t
../lib/subs.t
../lib/utf8.t
../lib/warnings.t
mro/basic_01_c3_utf8.t
mro/basic_01_dfs_utf8.t
mro/basic_02_c3_utf8.t
mro/basic_02_dfs_utf8.t
mro/basic_03_c3_utf8.t
mro/basic_03_dfs_utf8.t
mro/basic_04_c3_utf8.t
mro/basic_04_dfs_utf8.t
mro/basic_05_c3_utf8.t
mro/basic_05_dfs_utf8.t
mro/basic_utf8.t
mro/complex_c3_utf8.t
mro/complex_dfs_utf8.t
mro/dbic_c3_utf8.t
mro/dbic_dfs_utf8.t
mro/inconsistent_c3_utf8.t
mro/isa_aliases_utf8.t
mro/isa_c3_utf8.t
mro/isa_dfs_utf8.t
mro/isarev_utf8.t
mro/method_caching_utf8.t
mro/next_edgecases_utf8.t
mro/next_goto_utf8.t
mro/next_inanon_utf8.t
mro/next_ineval_utf8.t
mro/next_method_utf8.t
mro/next_NEXT_utf8.t
mro/next_skip_utf8.t
mro/overload_c3_utf8.t
mro/package_aliases_utf8.t
mro/pkg_gen_utf8.t
mro/recursion_c3_utf8.t
mro/recursion_dfs_utf8.t
mro/vulcan_c3_utf8.t
mro/vulcan_dfs_utf8.t
op/coreamp.t
op/die.t
op/evalbytes.t
op/fresh_perl_utf8.t
op/lexsub.t
op/substr.t
op/svleak.t
op/utf8cache.t
op/utfhash.t
re/pat_advanced.t
re/pat_re_eval.t
run/fresh_perl.t
uni/attrs.t
uni/bless.t
uni/caller.t
uni/goto.t
uni/gv.t
uni/labels.t
uni/method.t
uni/opcroak.t
uni/package.t
uni/parser.t
uni/readline.t
uni/select.t
uni/stash.t
uni/universal.t
uni/variables.t

This was the breaking commit:

commit ec8fb4ca440d25240bdf779967b119cb42325a1b (HEAD)
Merge: 3450d19250 e75a2dc5d0
Author:     Karl Williamson <khw@cpan.org>
AuthorDate: Fri Oct 17 12:28:02 2025 -0600
Commit:     Karl Williamson <khw@cpan.org>
CommitDate: Fri Oct 17 12:28:02 2025 -0600

    Merge branch Generalize S_parse_ident' into blead
    
    This series of commits documents, and generalizes this function so that
    it can be called in more circumstances; the final commit calls it from
    one such place, as a demonstration.
    
    This includes adding a flag to it that allows code to be moved from
    S_scan_ident to this function, and then called from a second place,
    eliminating near-duplication.
    
    The goal is to centralize to here the sort of handling of names, like
    identifiers, so changes can be made in just one place, and we can get
    rid of the other places which have slightly different rules from each
    other.

Now, my impression is that this failure was quickly detected and corrected in the very next commit to blead:

$ gitshowf |cat
commit 8b0fd010119b23c56b5fab3c50afe392adf5e128
Author:     Karl Williamson <khw@cpan.org>
AuthorDate: Fri Oct 17 13:28:30 2025 -0600
Commit:     Karl Williamson <khw@cpan.org>
CommitDate: Fri Oct 17 13:30:40 2025 -0600

    toke.c: Remove obsolete assert
    
    This resulted in merging two different pull requests at nearly the same
    time.  One put in the assert; the other changed things so it was wrong.
    They didn't touch the same lines of code, so rebasing didn't show any
    conflict, and if it fails depends on the memory layout, so my testing
    didn't fail.

diff --git a/toke.c b/toke.c
index 0e83002acb..7bfa1f42b0 100644
--- a/toke.c
+++ b/toke.c
@@ -10546,7 +10546,6 @@ S_parse_ident(pTHX_ const char *s, const char * const s_end,
                     bool is_utf8, U32 flags)
 {
     PERL_ARGS_ASSERT_PARSE_IDENT;
-    assert(*s <= PL_bufend);
 
     /* This function parses the string pointed to by '*s' (whose upper bound
      * is 's_end') looking for an identifier.  It stops at the first character

But why was this massive test failure apparently not detected by our CI test suite before the merge commit? @khwilliamson, can you investigate? Thanks.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions