@@ -10179,37 +10179,23 @@ static int zend_jit_do_fcall(zend_jit_ctx *jit, const zend_op *opline, const zen
1017910179 if (opline->opcode == ZEND_DO_FCALL || opline->opcode == ZEND_DO_FCALL_BY_NAME) {
1018010180 if (!func) {
1018110181 if (!trace) {
10182- ir_ref if_deprecated , ret;
10182+ ir_ref if_deprecated_nodiscard , ret;
1018310183
10184- if_deprecated = ir_IF(ir_AND_U32(
10184+ uint32_t no_discard = RETURN_VALUE_USED(opline) ? 0 : ZEND_ACC_NODISCARD;
10185+
10186+ if_deprecated_nodiscard = ir_IF(ir_AND_U32(
1018510187 ir_LOAD_U32(ir_ADD_OFFSET(func_ref, offsetof(zend_op_array, fn_flags))),
10186- ir_CONST_U32(ZEND_ACC_DEPRECATED)));
10187- ir_IF_TRUE_cold(if_deprecated );
10188+ ir_CONST_U32(ZEND_ACC_DEPRECATED|no_discard )));
10189+ ir_IF_TRUE_cold(if_deprecated_nodiscard );
1018810190
10191+ ir_ref helper = ir_CONST_FC_FUNC(no_discard ? zend_jit_deprecated_nodiscard_helper : zend_jit_deprecated_helper);
1018910192 if (GCC_GLOBAL_REGS) {
10190- ret = ir_CALL(IR_BOOL, ir_CONST_FC_FUNC(zend_jit_deprecated_helper) );
10193+ ret = ir_CALL(IR_BOOL, helper );
1019110194 } else {
10192- ret = ir_CALL_1(IR_BOOL, ir_CONST_FC_FUNC(zend_jit_deprecated_helper) , rx);
10195+ ret = ir_CALL_1(IR_BOOL, helper , rx);
1019310196 }
1019410197 ir_GUARD(ret, jit_STUB_ADDR(jit, jit_stub_exception_handler));
10195- ir_MERGE_WITH_EMPTY_FALSE(if_deprecated);
10196-
10197- if (!RETURN_VALUE_USED(opline)) {
10198- ir_ref if_nodiscard, ret;
10199-
10200- if_nodiscard = ir_IF(ir_AND_U32(
10201- ir_LOAD_U32(ir_ADD_OFFSET(func_ref, offsetof(zend_op_array, fn_flags))),
10202- ir_CONST_U32(ZEND_ACC_NODISCARD)));
10203- ir_IF_TRUE_cold(if_nodiscard);
10204-
10205- if (GCC_GLOBAL_REGS) {
10206- ret = ir_CALL(IR_BOOL, ir_CONST_FC_FUNC(zend_jit_nodiscard_helper));
10207- } else {
10208- ret = ir_CALL_1(IR_BOOL, ir_CONST_FC_FUNC(zend_jit_nodiscard_helper), rx);
10209- }
10210- ir_GUARD(ret, jit_STUB_ADDR(jit, jit_stub_exception_handler));
10211- ir_MERGE_WITH_EMPTY_FALSE(if_nodiscard);
10212- }
10198+ ir_MERGE_WITH_EMPTY_FALSE(if_deprecated_nodiscard);
1021310199 }
1021410200 } else {
1021510201 if (func->common.fn_flags & ZEND_ACC_DEPRECATED) {
0 commit comments