Perl / perl5

🐪 The Perl programming language
https://dev.perl.org/perl5/
Other
1.85k stars 527 forks source link

t/re/reg_mesg and t/re/regex_sets tests failing on sparc64-linux-gnu since 5.36 #20477

Open glaubitz opened 1 year ago

glaubitz commented 1 year ago

Since Perl version 5.36, the tests t/re/reg_mesg and t/re/regex_sets are failing on the sparc64-linux-gnu target:

t/re/reg_eval .................................................... ok
t/re/reg_eval_scope .............................................. ok
t/re/reg_fold .................................................... ok
t/re/reg_mesg .................................................... FAILED--no leader found
t/re/reg_namedcapture ............................................ ok
t/re/reg_nc_tie .................................................. ok
t/re/reg_nocapture ............................................... ok
t/re/reg_pmod .................................................... ok
t/re/reg_posixcc ................................................. ok
t/re/regex_sets .................................................. FAILED--no leader found
t/re/regex_sets_compat ........................................... ok
t/re/regexp ...................................................... ok
t/re/regexp_noamp ................................................ ok
t/re/regexp_nonull ............................................... ok

Full build log: https://buildd.debian.org/status/fetch.php?pkg=perl&arch=sparc64&ver=5.36.0-4&stamp=1666130893&raw=0

jkeenan commented 1 year ago

Can you run those two tests individually in the build directory and paste the relevant part of the results? Something like:

$ cd t; TEST_JOBS=1 ./perl harness -v re/reg_mesg.t re/regex_sets.t; cd -

Thank you very much.

glaubitz commented 1 year ago

Here's what I got for the tests in the static build:

(sid-sparc64-sbuild2)root@stadler:/build/perl-7Cs41Q/perl-5.36.0/build-static# cd t; TEST_JOBS=1 ../perl harness -v re/reg_mesg.t re/regex_sets.t; cd -
re/reg_mesg.t .... 
ok 1 -  /[[=foo=]]/ died
ok 2 - ... and gave expected message
ok 3 - ... and no other warnings
ok 4 -  /(?<= .*)/ died
ok 5 - ... and gave expected message
ok 6 - ... and no other warnings
ok 7 -  /(?<= a+)/ died
ok 8 - ... and gave expected message
ok 9 - ... and no other warnings
ok 10 -  /(?<= a{255})/ died
ok 11 - ... and gave expected message
ok 12 - ... and no other warnings
ok 13 -  /(?<= a{0,255})/ died
ok 14 - ... and gave expected message
ok 15 - ... and no other warnings
ok 16 -  /(?<= a{200}b{55})/ died
ok 17 - ... and gave expected message
ok 18 - ... and no other warnings
ok 19 -  /(?<= x{1000})/ died
ok 20 - ... and gave expected message
ok 21 - ... and no other warnings
ok 22 -  /(?<= (?&x))(?<x>x+)/ died
ok 23 - ... and gave expected message
ok 24 - ... and no other warnings
ok 25 -  /(?@)/ died
ok 26 - ... and gave expected message
ok 27 - ... and no other warnings
ok 28 -  /(?{ 1/ died
ok 29 - ... and gave expected message
ok 30 - ... and no other warnings
ok 31 -  /(?(1x))/ died
ok 32 - ... and gave expected message
ok 33 - ... and no other warnings
ok 34 -  /(?(1x(?\#)))/ died
ok 35 - ... and gave expected message
ok 36 - ... and no other warnings
ok 37 -  /(?(1)/ died
ok 38 - ... and gave expected message
ok 39 - ... and no other warnings
ok 40 -  /(?(1)x/ died
ok 41 - ... and gave expected message
ok 42 - ... and no other warnings
ok 43 -  /(?(1)x|y/ died
ok 44 - ... and gave expected message
ok 45 - ... and no other warnings
ok 46 -  /(?(1)x|y|z)/ died
ok 47 - ... and gave expected message
ok 48 - ... and no other warnings
ok 49 -  /(?(x)y|x)/ died
ok 50 - ... and gave expected message
ok 51 - ... and no other warnings
ok 52 -  /(?(??{}))/ died
ok 53 - ... and gave expected message
ok 54 - ... and no other warnings
ok 55 -  /(?(?[]))/ died
ok 56 - ... and gave expected message
ok 57 - ... and no other warnings
ok 58 -  /(?/ died
ok 59 - ... and gave expected message
ok 60 - ... and no other warnings
ok 61 -  /(?;x/ died
ok 62 - ... and gave expected message
ok 63 - ... and no other warnings
ok 64 -  /(?<;x/ died
ok 65 - ... and gave expected message
ok 66 - ... and no other warnings
ok 67 -  /(?\ix/ died
ok 68 - ... and gave expected message
ok 69 - ... and no other warnings
ok 70 -  /(?\mx/ died
ok 71 - ... and gave expected message
ok 72 - ... and no other warnings
ok 73 -  /(?\:x/ died
ok 74 - ... and gave expected message
ok 75 - ... and no other warnings
ok 76 -  /(?\=x/ died
ok 77 - ... and gave expected message
ok 78 - ... and no other warnings
ok 79 -  /(?\!x/ died
ok 80 - ... and gave expected message
ok 81 - ... and no other warnings
ok 82 -  /(?\<=x/ died
ok 83 - ... and gave expected message
ok 84 - ... and no other warnings
ok 85 -  /(?\<!x/ died
ok 86 - ... and gave expected message
ok 87 - ... and no other warnings
ok 88 -  /(?\>x/ died
ok 89 - ... and gave expected message
ok 90 - ... and no other warnings
ok 91 -  /(?^-i:foo)/ died
ok 92 - ... and gave expected message
ok 93 - ... and no other warnings
ok 94 -  /(?^-i)foo/ died
ok 95 - ... and gave expected message
ok 96 - ... and no other warnings
ok 97 -  /(?^d:foo)/ died
ok 98 - ... and gave expected message
ok 99 - ... and no other warnings
ok 100 -  /(?^d)foo/ died
ok 101 - ... and gave expected message
ok 102 - ... and no other warnings
ok 103 -  /(?^lu:foo)/ died
ok 104 - ... and gave expected message
ok 105 - ... and no other warnings
ok 106 -  /(?^lu)foo/ died
ok 107 - ... and gave expected message
ok 108 - ... and no other warnings
ok 109 -  /(?da:foo)/ died
ok 110 - ... and gave expected message
ok 111 - ... and no other warnings
ok 112 -  /(?lil:foo)/ died
ok 113 - ... and gave expected message
ok 114 - ... and no other warnings
ok 115 -  /(?aaia:foo)/ died
ok 116 - ... and gave expected message
ok 117 - ... and no other warnings
ok 118 -  /(?i-l:foo)/ died
ok 119 - ... and gave expected message
ok 120 - ... and no other warnings
ok 121 -  /((x)/ died
ok 122 - ... and gave expected message
ok 123 - ... and no other warnings
ok 124 -  /{(}/ died
ok 125 - ... and gave expected message
ok 126 - ... and no other warnings
ok 127 -  /x{65536}/ died
ok 128 - ... and gave expected message
ok 129 - ... and no other warnings
ok 130 -  /x{65536,}/ died
ok 131 - ... and gave expected message
ok 132 - ... and no other warnings
ok 133 -  /x{01,2}/ died
ok 134 - ... and gave expected message
ok 135 - ... and no other warnings
ok 136 -  /x{1,02}/ died
ok 137 - ... and gave expected message
ok 138 - ... and no other warnings
ok 139 -  /x**/ died
ok 140 - ... and gave expected message
ok 141 - ... and no other warnings
ok 142 -  /x[/ died
ok 143 - ... and gave expected message
ok 144 - ... and no other warnings
ok 145 -  /*/ died
ok 146 - ... and gave expected message
ok 147 - ... and no other warnings
ok 148 -  /\p{x/ died
ok 149 - ... and gave expected message
ok 150 - ... and no other warnings
ok 151 -  /[\p{x]/ died
ok 152 - ... and gave expected message
ok 153 - ... and no other warnings
ok 154 -  /(x)\2/ died
ok 155 - ... and gave expected message
ok 156 - ... and no other warnings
ok 157 -  /\g/ died
ok 158 - ... and gave expected message
ok 159 - ... and no other warnings
ok 160 -  /\g{1/ died
ok 161 - ... and gave expected message
ok 162 - ... and no other warnings
ok 163 -  /\g{-abc}/ died
ok 164 - ... and gave expected message
ok 165 - ... and no other warnings
ok 166 -  /(?<;x/ died
ok 167 - ... and gave expected message
ok 168 - ... and no other warnings
ok 169 -  my $m = "\\"; $m =~ $m died
ok 170 - ... and gave expected message
ok 171 - ... and no other warnings
ok 172 -  /\x{ 1 / died
ok 173 - ... and gave expected message
ok 174 - ... and no other warnings
ok 175 -  /\x{X/ died
ok 176 - ... and gave expected message
ok 177 - ... and no other warnings
ok 178 -  /[\x{X]/ died
ok 179 - ... and gave expected message
ok 180 - ... and no other warnings
ok 181 -  /[\x{ A ]/ died
ok 182 - ... and gave expected message
ok 183 - ... and no other warnings
ok 184 -  /\o{ 1 / died
ok 185 - ... and gave expected message
ok 186 - ... and no other warnings
ok 187 -  /\o{X/ died
ok 188 - ... and gave expected message
ok 189 - ... and no other warnings
ok 190 -  /[\o{X]/ died
ok 191 - ... and gave expected message
ok 192 - ... and no other warnings
ok 193 -  /[\o{ 7 ]/ died
ok 194 - ... and gave expected message
ok 195 - ... and no other warnings
ok 196 -  /[[:barf:]]/ died
ok 197 - ... and gave expected message
ok 198 - ... and no other warnings
ok 199 -  /[[=barf=]]/ died
ok 200 - ... and gave expected message
ok 201 - ... and no other warnings
ok 202 -  /[[.barf.]]/ died
ok 203 - ... and gave expected message
ok 204 - ... and no other warnings
ok 205 -  /[z-a]/ died
ok 206 - ... and gave expected message
ok 207 - ... and no other warnings
ok 208 -  /\p/ died
ok 209 - ... and gave expected message
ok 210 - ... and no other warnings
ok 211 -  /\P/ died
ok 212 - ... and gave expected message
ok 213 - ... and no other warnings
ok 214 -  /\p{}/ died
ok 215 - ... and gave expected message
ok 216 - ... and no other warnings
ok 217 -  /\P{}/ died
ok 218 - ... and gave expected message
ok 219 - ... and no other warnings
ok 220 -  /a\b{cde/ died
ok 221 - ... and gave expected message
ok 222 - ... and no other warnings
ok 223 -  /a\B{cde/ died
ok 224 - ... and gave expected message
ok 225 - ... and no other warnings
ok 226 -  /\b{}/ died
ok 227 - ... and gave expected message
ok 228 - ... and no other warnings
ok 229 -  /\B{}/ died
ok 230 - ... and gave expected message
ok 231 - ... and no other warnings
ok 232 -  /\b{gc}/ died
ok 233 - ... and gave expected message
ok 234 - ... and no other warnings
ok 235 -  /\B{gc}/ died
ok 236 - ... and gave expected message
ok 237 - ... and no other warnings
ok 238 -  /(?[[[::]]])/ died
ok 239 - ... and gave expected message
ok 240 - ... and no other warnings
ok 241 -  /(?[[[:w:]]])/ died
ok 242 - ... and gave expected message
ok 243 - ... and no other warnings
ok 244 -  /(?[a])/ died
ok 245 - ... and gave expected message
ok 246 - ... and no other warnings
ok 247 -  /(?[ + \t ])/ died
ok 248 - ... and gave expected message
ok 249 - ... and no other warnings
ok 250 -  /(?[ \cK - ( + \t ) ])/ died
ok 251 - ... and gave expected message
ok 252 - ... and no other warnings
ok 253 -  /(?[ \cK ( \t ) ])/ died
ok 254 - ... and gave expected message
ok 255 - ... and no other warnings
ok 256 -  /(?[ \cK \t ])/ died
ok 257 - ... and gave expected message
ok 258 - ... and no other warnings
ok 259 -  /(?[ \0004 ])/ died
ok 260 - ... and gave expected message
ok 261 - ... and no other warnings
ok 262 -  /(?[ \05 ])/ died
ok 263 - ... and gave expected message
ok 264 - ... and no other warnings
ok 265 -  /(?[ \o{1038} ])/ died
ok 266 - ... and gave expected message
ok 267 - ... and no other warnings
ok 268 -  /(?[ \o{} ])/ died
ok 269 - ... and gave expected message
ok 270 - ... and no other warnings
ok 271 -  /(?[ \x{defg} ])/ died
ok 272 - ... and gave expected message
ok 273 - ... and no other warnings
ok 274 -  /(?[ \xabcdef ])/ died
ok 275 - ... and gave expected message
ok 276 - ... and no other warnings
ok 277 -  /(?[ \x{} ])/ died
ok 278 - ... and gave expected message
ok 279 - ... and no other warnings
ok 280 -  /(?[ \cK + ) ])/ died
ok 281 - ... and gave expected message
ok 282 - ... and no other warnings
ok 283 -  /(?[ \cK + ])/ died
ok 284 - ... and gave expected message
ok 285 - ... and no other warnings
ok 286 -  /(?[ ( ) ])/ died
ok 287 - ... and gave expected message
ok 288 - ... and no other warnings
ok 289 -  /(?[[0]+()+])/ died
ok 290 - ... and gave expected message
ok 291 - ... and no other warnings
ok 292 -  /(?[ \p{foo} ])/ died
ok 293 - ... and gave expected message
ok 294 - ... and no other warnings
ok 295 -  /(?[ \p{ foo = bar } ])/ died
ok 296 - ... and gave expected message
ok 297 - ... and no other warnings
ok 298 -  /(?[ \8 ])/ died
ok 299 - ... and gave expected message
ok 300 - ... and no other warnings
ok 301 -  /(?[ \t ]/ died
ok 302 - ... and gave expected message
ok 303 - ... and no other warnings
ok 304 -  /(?[ [ \t ]/ died
ok 305 - ... and gave expected message
ok 306 - ... and no other warnings
ok 307 -  /(?[ \t ] ]/ died
ok 308 - ... and gave expected message
ok 309 - ... and no other warnings
ok 310 -  /(?[ [ ] ]/ died
ok 311 - ... and gave expected message
ok 312 - ... and no other warnings
ok 313 -  /(?[ \t + \e \# This was supposed to be a comment ])/ died
ok 314 - ... and gave expected message
ok 315 - ... and no other warnings
ok 316 -  /(?[ ])/ died
ok 317 - ... and gave expected message
ok 318 - ... and no other warnings
ok 319 -  m/(?[[a-\d]])/ died
ok 320 - ... and gave expected message
ok 321 - ... and no other warnings
ok 322 -  m/(?[[\w-x]])/ died
ok 323 - ... and gave expected message
ok 324 - ... and no other warnings
ok 325 -  m/(?[[a-\pM]])/ died
ok 326 - ... and gave expected message
ok 327 - ... and no other warnings
ok 328 -  m/(?[[\pM-x]])/ died
ok 329 - ... and gave expected message
ok 330 - ... and no other warnings
ok 331 -  m/(?[[^\N{LATIN CAPITAL LETTER A WITH MACRON AND GRAVE}]])/ died
ok 332 - ... and gave expected message
ok 333 - ... and no other warnings
ok 334 -  m/(?[ \p{Digit} & (?^(?[ \p{Thai} | \p{Lao} ]))])/ died
ok 335 - ... and gave expected message
ok 336 - ... and no other warnings
ok 337 -  m/(?[ \p{Digit} & (?(?[ \p{Thai} | \p{Lao} ]))])/ died
ok 338 - ... and gave expected message
ok 339 - ... and no other warnings
ok 340 -  m/\p{Is_Is_Any}/ died
ok 341 - ... and gave expected message
ok 342 - ... and no other warnings
ok 343 -  m/\o{/ died
ok 344 - ... and gave expected message
ok 345 - ... and no other warnings
ok 346 -  m/\o/ died
ok 347 - ... and gave expected message
ok 348 - ... and no other warnings
ok 349 -  m/\o{}/ died
ok 350 - ... and gave expected message
ok 351 - ... and no other warnings
ok 352 -  m/[\o{]/ died
ok 353 - ... and gave expected message
ok 354 - ... and no other warnings
ok 355 -  m/[\o]/ died
ok 356 - ... and gave expected message
ok 357 - ... and no other warnings
ok 358 -  m/[\o{}]/ died
ok 359 - ... and gave expected message
ok 360 - ... and no other warnings
ok 361 -  m/(?^-i:foo)/ died
ok 362 - ... and gave expected message
ok 363 - ... and no other warnings
ok 364 -  m/\87/ died
ok 365 - ... and gave expected message
ok 366 - ... and no other warnings
ok 367 -  m/a\87/ died
ok 368 - ... and gave expected message
ok 369 - ... and no other warnings
ok 370 -  m/a\97/ died
ok 371 - ... and gave expected message
ok 372 - ... and no other warnings
ok 373 -  m/(*DOOF)/ died
ok 374 - ... and gave expected message
ok 375 - ... and no other warnings
ok 376 -  m/(?&a/ died
ok 377 - ... and gave expected message
ok 378 - ... and no other warnings
ok 379 -  m/(?P=/ died
ok 380 - ... and gave expected message
ok 381 - ... and no other warnings
ok 382 -  m/(?'/ died
ok 383 - ... and gave expected message
ok 384 - ... and no other warnings
ok 385 -  m/(?</ died
ok 386 - ... and gave expected message
ok 387 - ... and no other warnings
ok 388 -  m/(?&/ died
ok 389 - ... and gave expected message
ok 390 - ... and no other warnings
ok 391 -  m/(?(</ died
ok 392 - ... and gave expected message
ok 393 - ... and no other warnings
ok 394 -  m/(?('/ died
ok 395 - ... and gave expected message
ok 396 - ... and no other warnings
ok 397 -  m/\g{/ died
ok 398 - ... and gave expected message
ok 399 - ... and no other warnings
ok 400 -  m/\k</ died
ok 401 - ... and gave expected message
ok 402 - ... and no other warnings
ok 403 -  /((?\# This is a comment in the middle of a token)?:foo)/ died
ok 404 - ... and gave expected message
ok 405 - ... and no other warnings
ok 406 -  /((?\# This is a comment in the middle of a token)*FAIL)/ died
ok 407 - ... and gave expected message
ok 408 - ... and no other warnings
ok 409 -  /((?\# This is a comment in the middle of a token)*script_run:foo)/ died
ok 410 - ... and gave expected message
ok 411 - ... and no other warnings
ok 412 -  /(*script_runfoo)/ died
ok 413 - ... and gave expected message
ok 414 - ... and no other warnings
ok 415 -  /(*srfoo)/ died
ok 416 - ... and gave expected message
ok 417 - ... and no other warnings
ok 418 -  /(*script_run)/ died
ok 419 - ... and gave expected message
ok 420 - ... and no other warnings
ok 421 -  /(*sr)/ died
ok 422 - ... and gave expected message
ok 423 - ... and no other warnings
ok 424 -  /(*pla)/ died
ok 425 - ... and gave expected message
ok 426 - ... and no other warnings
ok 427 -  /(*script_run/ died
ok 428 - ... and gave expected message
ok 429 - ... and no other warnings
ok 430 -  /(*sr/ died
ok 431 - ... and gave expected message
ok 432 - ... and no other warnings
ok 433 -  /(*script_run:foo/ died
ok 434 - ... and gave expected message
ok 435 - ... and no other warnings
ok 436 -  /(*sr:foo/ died
ok 437 - ... and gave expected message
ok 438 - ... and no other warnings
ok 439 -  /(?[\ &!])/ died
ok 440 - ... and gave expected message
ok 441 - ... and no other warnings
ok 442 -  /(?[\ +!])/ died
ok 443 - ... and gave expected message
ok 444 - ... and no other warnings
ok 445 -  /(?[\ -!])/ died
ok 446 - ... and gave expected message
ok 447 - ... and no other warnings
ok 448 -  /(?[\ ^!])/ died
ok 449 - ... and gave expected message
ok 450 - ... and no other warnings
ok 451 -  /(?[\ |!])/ died
ok 452 - ... and gave expected message
ok 453 - ... and no other warnings
ok 454 -  /(?[()-!])/ died
ok 455 - ... and gave expected message
ok 456 - ... and no other warnings
ok 457 -  /(?[!()])/ died
ok 458 - ... and gave expected message
ok 459 - ... and no other warnings
ok 460 -  /\w{/ died
ok 461 - ... and gave expected message
ok 462 - ... and no other warnings
ok 463 -  /\q{/ died
ok 464 - ... and gave expected message
ok 465 - ... and no other warnings
ok 466 -  /\A{/ died
ok 467 - ... and gave expected message
ok 468 - ... and no other warnings
ok 469 -  /(?<=/ died
ok 470 - ... and gave expected message
ok 471 - ... and no other warnings
ok 472 -  /(?<!/ died
ok 473 - ... and gave expected message
ok 474 - ... and no other warnings
ok 475 -  /(?!/ died
ok 476 - ... and gave expected message
ok 477 - ... and no other warnings
ok 478 -  /(?=/ died
ok 479 - ... and gave expected message
ok 480 - ... and no other warnings
ok 481 -  /\p{vertical 
                        tab}/ died
ok 482 - ... and gave expected message
ok 483 - ... and no other warnings
All 483 subtests passed 
re/regex_sets.t .. No subtests run 

Test Summary Report
-------------------
re/reg_mesg.t  (Wstat: 10 (Signal: BUS) Tests: 483 Failed: 0)
  Non-zero wait status: 10
  Parse errors: No plan found in TAP output
re/regex_sets.t (Wstat: 10 (Signal: BUS) Tests: 0 Failed: 0)
  Non-zero wait status: 10
  Parse errors: No plan found in TAP output
Files=2, Tests=483,  1 wallclock secs ( 0.28 usr  0.03 sys +  0.90 cusr  0.08 csys =  1.29 CPU)
Result: FAIL
/build/perl-7Cs41Q/perl-5.36.0/build-static
(sid-sparc64-sbuild2)root@stadler:/build/perl-7Cs41Q/perl-5.36.0/build-static#

Running the dynamic tests didn't work.

FWIW, the GCC compile farm has two SPARC machines running Linux available for such tests.

See: https://gcc.gnu.org/wiki/CompileFarm

demerphq commented 1 year ago

Could you build your perl with -g and -DDEBUGGING and then run the tests that throwing exceptions in some kind of debugger so we can see the C backtrace when the exception is thrown?

glaubitz commented 1 year ago

Could you build your perl with -g and -DDEBUGGING and then run the tests that throwing exceptions in some kind of debugger so we can see the C backtrace when the exception is thrown?

OK, let me start by building perl5 from git on gcc202 and then I'll try to get a backtrace.

glaubitz commented 1 year ago

Interesting. The testsuite passes on git master. Let me bisect this.

demerphq commented 1 year ago

Can we close this? @glaubitz did you get anywhere with it?

khwilliamson commented 3 weeks ago

@glaubitz I suspect this is fixed; if I don't hear from you otherwise by May 19, 2024, we will close this ticket

glaubitz commented 3 weeks ago

@glaubitz I suspect this is fixed; if I don't hear from you otherwise by May 19, 2024, we will close this ticket

It's fixed with 5.38.x, but still present in 5.36.x.

thesamesam commented 3 weeks ago

I feel like I remember @glaubitz and I looking at this together and I ended up concluding which patches we needed in 5.36.x to fix it, then I completely forgot about it as we'd already moved to 5.38 in Gentoo.

Let me try dig up my logs...

EDIT: https://github.com/Perl/perl5/commit/89d80cc9efb3eefc31aa62b32c9e745f8de6412f apparently, which tracks. It's on the 5.36 branch but not in a 5.36 point release.

khwilliamson commented 3 weeks ago

5.36 will become unsupported with the release of 5.40 scheduled for a month from now. And I doubt that we would release a new 5.36 in the meantime for just this issue.

thesamesam commented 3 weeks ago

Sorry, to be clear, I wasn't asking for a new release - just trying to state the situation. The status quo is OK for us, but I can't speak for Debian. Hopefully they can backport the patch.

glaubitz commented 3 weeks ago

Debian is using 5.38.2 in unstable which is the only distribution available for sparc64. Hence, Debian isn't affected by the bug anymore either.