This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
stop -MO=Concise -e'm?x?' segfaulting
The op_pmreplstart field in a PMOP is actually a union, containing
op_pmreplstart for OP_SUBST, and op_pmstash/op_pmstashoff for OP_MATCH
with PMf_ONCE set.
The B pmreplstart method just blindly treated the value of this field as
an op pointer, even when it wasn't an OP_SUBST. Hence the segfault.
Make it instead return a null pointer when not OP_SUBST.
At the same time I improved the PMOP handling code in Concise.xs so that
it expects particular types for that and the op_pmreplrootu union based on
the op type (OP_SUBST or OP_PUSHRE) rather than trying to handle any field
value regardless of op type.