This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
quadmath helpers export list.
[perl5.git] / pp_hot.c
index 2624a71..8ff2578 100644 (file)
--- a/pp_hot.c
+++ b/pp_hot.c
@@ -47,6 +47,7 @@ PP(pp_const)
 PP(pp_nextstate)
 {
     PL_curcop = (COP*)PL_op;
+    PL_sawalias = 0;
     TAINT_NOT;         /* Each statement is presumed innocent */
     PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
     FREETMPS;
@@ -62,6 +63,8 @@ PP(pp_gvsv)
        PUSHs(save_scalar(cGVOP_gv));
     else
        PUSHs(GvSVn(cGVOP_gv));
+    if (GvREFCNT(cGVOP_gv) > 1 || GvALIASED_SV(cGVOP_gv))
+       PL_sawalias = TRUE;
     RETURN;
 }
 
@@ -92,6 +95,9 @@ PP(pp_gv)
 {
     dSP;
     XPUSHs(MUTABLE_SV(cGVOP_gv));
+    if (isGV(cGVOP_gv)
+     && (GvREFCNT(cGVOP_gv) > 1 || GvALIASED_SV(cGVOP_gv)))
+       PL_sawalias = TRUE;
     RETURN;
 }
 
@@ -1005,7 +1011,7 @@ PP(pp_aassign)
      * Don't bother if LHS is just an empty hash or array.
      */
 
-    if (    (PL_op->op_private & OPpASSIGN_COMMON)
+    if (    (PL_op->op_private & OPpASSIGN_COMMON || PL_sawalias)
        &&  (
               firstlelem != lastlelem
            || ! ((sv = *firstlelem))
@@ -1917,7 +1923,6 @@ PP(pp_iter)
                 Perl_croak(aTHX_ "Use of freed value in iteration");
             }
             if (SvPADTMP(sv)) {
-                assert(!IS_PADGV(sv));
                 sv = newSVsv(sv);
             }
             else {
@@ -2435,7 +2440,6 @@ PP(pp_grepwhile)
 
        src = PL_stack_base[*PL_markstack_ptr];
        if (SvPADTMP(src)) {
-            assert(!IS_PADGV(src));
            src = PL_stack_base[*PL_markstack_ptr] = sv_mortalcopy(src);
            PL_tmps_floor++;
        }
@@ -2697,7 +2701,6 @@ try_autoload:
                if (*MARK)
                {
                    if (SvPADTMP(*MARK)) {
-                        assert(!IS_PADGV(*MARK));
                        *MARK = sv_mortalcopy(*MARK);
                     }
                    SvTEMP_off(*MARK);
@@ -2766,7 +2769,6 @@ try_autoload:
            while (items--) {
                mark++;
                if (*mark && SvPADTMP(*mark)) {
-                    assert(!IS_PADGV(*mark));
                    *mark = sv_mortalcopy(*mark);
                 }
            }