According to newSVrv, it's
SV_CHECK_THINKFIRST_COW_DROP(rv);
(void)SvAMAGIC_off(rv);
if (SvTYPE(rv) >= SVt_PVMG) {
const U32 refcnt = SvREFCNT(rv);
SvREFCNT(rv) = 0;
sv_clear(rv);
SvFLAGS(rv) = 0;
SvREFCNT(rv) = refcnt;
sv_upgrade(rv, SVt_IV);
} else if (SvROK(rv)) {
SvREFCNT_dec(SvRV(rv));
} else if (SvTYPE(rv) < SVt_PV && SvTYPE(rv) != SVt_IV) {
sv_upgrade(rv, SVt_IV);
} else if (SvTYPE(rv) >= SVt_PV) {
SvPV_free(rv);
SvLEN_set(rv, 0);
SvCUR_set(rv, 0);
}
SvOK_off(rv);
SvRV_set(rv, sv);
SvROK_on(rv);
SvREFCNT_inc(sv);
SvSETMAGIC(rv);
Or you could use
sv_replace(rv, newRV_inc(sv))
SvSETMAGIC(rv);
Update: Fixed ref count as per reply.