This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
[perl #29790] Optimization busted: '@a = "b", sort @a' drops "b"
[perl5.git] / op.c
diff --git a/op.c b/op.c
index bdc3426..cdc0749 100644 (file)
--- a/op.c
+++ b/op.c
@@ -6642,6 +6642,17 @@ Perl_peep(pTHX_ register OP *o)
                    || (o2->op_flags & OPf_WANT) != OPf_WANT_VOID)
                break;
 
+           /* check that the sort is the first arg on RHS of assign */
+
+           o2 = cUNOPx(o2)->op_first;
+           if (!o2 || o2->op_type != OP_NULL)
+               break;
+           o2 = cUNOPx(o2)->op_first;
+           if (!o2 || o2->op_type != OP_PUSHMARK)
+               break;
+           if (o2->op_sibling != o)
+               break;
+
            /* check the array is the same on both sides */
            if (oleft->op_type == OP_RV2AV) {
                if (oright->op_type != OP_RV2AV