summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--UPGRADING.INTERNALS6
-rw-r--r--Zend/zend_compile.c5
-rw-r--r--Zend/zend_execute.c3
-rw-r--r--ext/opcache/Optimizer/compact_literals.c2
-rw-r--r--ext/opcache/Optimizer/dce.c1
-rw-r--r--ext/opcache/Optimizer/zend_cfg.c9
-rw-r--r--ext/opcache/jit/zend_jit.c18
-rw-r--r--ext/opcache/jit/zend_jit_trace.c11
-rw-r--r--ext/opcache/jit/zend_jit_x86.dasc3
-rw-r--r--sapi/phpdbg/phpdbg.c3
10 files changed, 14 insertions, 47 deletions
diff --git a/UPGRADING.INTERNALS b/UPGRADING.INTERNALS
index 249cd553ba..1815a9c264 100644
--- a/UPGRADING.INTERNALS
+++ b/UPGRADING.INTERNALS
@@ -23,6 +23,8 @@ PHP 8.0 INTERNALS UPGRADE NOTES
t. Signature changes
u. Error Notification callbacks to replace zend_error_cb overwrite use-cases
v. Removed Zend APIs
+ w. Renamed Zend APIs
+ x. ZEND_EXT_NOP no longer emitted
2. Build system changes
a. Abstract
@@ -395,6 +397,10 @@ PHP 8.0 INTERNALS UPGRADE NOTES
w. The following APIs have been renamed:
- _zend_ts_hash_init() to zend_ts_hash_init()
+ x. In COMPILE_EXTENDED_STMT mode, a ZEND_EXT_NOP opcode will no longer be
+ generated at the start of a function. Use the new observer APIs or hook
+ into zend_execute_ex instead.
+
========================
2. Build system changes
========================
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index 719e7aaffe..f42542c6b2 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -6936,11 +6936,6 @@ void zend_compile_func_decl(znode *result, zend_ast *ast, zend_bool toplevel) /*
zend_oparray_context_begin(&orig_oparray_context);
- if (CG(compiler_options) & ZEND_COMPILE_EXTENDED_STMT) {
- zend_op *opline_ext = zend_emit_op(NULL, ZEND_EXT_NOP, NULL, NULL);
- opline_ext->lineno = decl->start_lineno;
- }
-
{
/* Push a separator to the loop variable stack */
zend_loop_var dummy_var;
diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c
index 22afd49c2e..e2e5aa8391 100644
--- a/Zend/zend_execute.c
+++ b/Zend/zend_execute.c
@@ -4454,14 +4454,13 @@ ZEND_API zend_result ZEND_FASTCALL zend_handle_undef_args(zend_execute_data *cal
if (fbc->type == ZEND_USER_FUNCTION) {
zend_op_array *op_array = &fbc->op_array;
uint32_t num_args = ZEND_CALL_NUM_ARGS(call);
- uint32_t opline_offset = op_array->opcodes[0].opcode == ZEND_EXT_NOP;
for (uint32_t i = 0; i < num_args; i++) {
zval *arg = ZEND_CALL_VAR_NUM(call, i);
if (!Z_ISUNDEF_P(arg)) {
continue;
}
- zend_op *opline = &op_array->opcodes[i + opline_offset];
+ zend_op *opline = &op_array->opcodes[i];
if (EXPECTED(opline->opcode == ZEND_RECV_INIT)) {
zval *default_value = RT_CONSTANT(opline, opline->op2);
if (Z_OPT_TYPE_P(default_value) == IS_CONSTANT_AST) {
diff --git a/ext/opcache/Optimizer/compact_literals.c b/ext/opcache/Optimizer/compact_literals.c
index 3feba98d03..0e1529d2bd 100644
--- a/ext/opcache/Optimizer/compact_literals.c
+++ b/ext/opcache/Optimizer/compact_literals.c
@@ -815,7 +815,7 @@ void zend_optimizer_compact_literals(zend_op_array *op_array, zend_optimizer_ctx
Z_CACHE_SLOT_P(val) = op_array->cache_size;
op_array->cache_size += sizeof(zval);
}
- } else if (opline->opcode != ZEND_RECV && opline->opcode != ZEND_EXT_NOP) {
+ } else if (opline->opcode != ZEND_RECV) {
break;
}
opline++;
diff --git a/ext/opcache/Optimizer/dce.c b/ext/opcache/Optimizer/dce.c
index c2f7550e91..91c9665d1d 100644
--- a/ext/opcache/Optimizer/dce.c
+++ b/ext/opcache/Optimizer/dce.c
@@ -152,7 +152,6 @@ static inline zend_bool may_have_side_effects(
case ZEND_EXT_STMT:
case ZEND_EXT_FCALL_BEGIN:
case ZEND_EXT_FCALL_END:
- case ZEND_EXT_NOP:
case ZEND_TICKS:
case ZEND_YIELD:
case ZEND_YIELD_FROM:
diff --git a/ext/opcache/Optimizer/zend_cfg.c b/ext/opcache/Optimizer/zend_cfg.c
index f036950ffa..0560bcf2d5 100644
--- a/ext/opcache/Optimizer/zend_cfg.c
+++ b/ext/opcache/Optimizer/zend_cfg.c
@@ -112,10 +112,6 @@ static void zend_mark_reachable_blocks(const zend_op_array *op_array, zend_cfg *
zend_basic_block *blocks = cfg->blocks;
blocks[start].flags = ZEND_BB_START;
- if (op_array->opcodes[0].opcode == ZEND_EXT_NOP
- && (cfg->flags & ZEND_CFG_RECV_ENTRY)) {
- blocks[1].flags |= ZEND_BB_RECV_ENTRY;
- }
zend_mark_reachable(op_array->opcodes, cfg, blocks + start);
if (op_array->last_try_catch) {
@@ -291,10 +287,6 @@ int zend_build_cfg(zend_arena **arena, const zend_op_array *op_array, uint32_t b
/* Build CFG, Step 1: Find basic blocks starts, calculate number of blocks */
BB_START(0);
- if (op_array->opcodes[0].opcode == ZEND_EXT_NOP
- && (build_flags & ZEND_CFG_RECV_ENTRY)) {
- BB_START(1);
- }
for (i = 0; i < op_array->last; i++) {
zend_op *opline = op_array->opcodes + i;
switch (opline->opcode) {
@@ -434,7 +426,6 @@ int zend_build_cfg(zend_arena **arena, const zend_op_array *op_array, uint32_t b
case ZEND_FUNC_GET_ARGS:
flags |= ZEND_FUNC_VARARG;
break;
- case ZEND_EXT_NOP:
case ZEND_EXT_STMT:
flags |= ZEND_FUNC_HAS_EXTENDED_STMT;
break;
diff --git a/ext/opcache/jit/zend_jit.c b/ext/opcache/jit/zend_jit.c
index 7c9704954a..3dad8e4f91 100644
--- a/ext/opcache/jit/zend_jit.c
+++ b/ext/opcache/jit/zend_jit.c
@@ -2118,8 +2118,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op
}
recv_emitted = 1;
} else if (opline->opcode == ZEND_RECV) {
- if (!(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS)
- && op_array->opcodes[0].opcode != ZEND_EXT_NOP) {
+ if (!(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS)) {
/* skip */
continue;
} else if (recv_emitted) {
@@ -3540,9 +3539,6 @@ static void ZEND_FASTCALL zend_runtime_jit(void)
/* restore original opcode handlers */
if (!(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS)) {
- if (opline->opcode == ZEND_EXT_NOP) {
- opline++;
- }
while (opline->opcode == ZEND_RECV || opline->opcode == ZEND_RECV_INIT) {
opline++;
}
@@ -3576,9 +3572,6 @@ void zend_jit_check_funcs(HashTable *function_table, zend_bool is_method) {
op_array = &func->op_array;
opline = op_array->opcodes;
if (!(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS)) {
- if (opline->opcode == ZEND_EXT_NOP) {
- opline++;
- }
while (opline->opcode == ZEND_RECV || opline->opcode == ZEND_RECV_INIT) {
opline++;
}
@@ -3651,9 +3644,6 @@ static int zend_jit_setup_hot_counters(zend_op_array *op_array)
if (JIT_G(hot_func)) {
if (!(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS)) {
- if (opline->opcode == ZEND_EXT_NOP) {
- opline++;
- }
while (opline->opcode == ZEND_RECV || opline->opcode == ZEND_RECV_INIT) {
opline++;
}
@@ -3692,9 +3682,6 @@ ZEND_EXT_API int zend_jit_op_array(zend_op_array *op_array, zend_script *script)
/* Set run-time JIT handler */
ZEND_ASSERT(zend_jit_runtime_jit_handler != NULL);
if (!(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS)) {
- if (opline->opcode == ZEND_EXT_NOP) {
- opline++;
- }
while (opline->opcode == ZEND_RECV || opline->opcode == ZEND_RECV_INIT) {
opline++;
}
@@ -3714,9 +3701,6 @@ ZEND_EXT_API int zend_jit_op_array(zend_op_array *op_array, zend_script *script)
ZEND_ASSERT(zend_jit_profile_jit_handler != NULL);
if (op_array->function_name) {
if (!(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS)) {
- if (opline->opcode == ZEND_EXT_NOP) {
- opline++;
- }
while (opline->opcode == ZEND_RECV || opline->opcode == ZEND_RECV_INIT) {
opline++;
}
diff --git a/ext/opcache/jit/zend_jit_trace.c b/ext/opcache/jit/zend_jit_trace.c
index 65b6f17c95..4edb08e08f 100644
--- a/ext/opcache/jit/zend_jit_trace.c
+++ b/ext/opcache/jit/zend_jit_trace.c
@@ -1743,8 +1743,7 @@ propagate_arg:
}
}
if (opline->opcode == ZEND_RECV_INIT
- && !(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS)
- && op_array->opcodes[0].opcode != ZEND_EXT_NOP) {
+ && !(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS)) {
/* RECV_INIT always copy the constant */
ssa_var_info[ssa_ops[idx].result_def].type = _const_op_type(RT_CONSTANT(opline, opline->op2));
} else if ((opline->opcode == ZEND_FE_FETCH_R || opline->opcode == ZEND_FE_FETCH_RW)
@@ -1806,8 +1805,7 @@ propagate_arg:
}
}
if (opline->opcode == ZEND_RECV_INIT
- && !(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS)
- && op_array->opcodes[0].opcode != ZEND_EXT_NOP) {
+ && !(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS)) {
/* RECV_INIT always copy the constant */
ssa_var_info[ssa_ops[idx].result_def].type = _const_op_type(RT_CONSTANT(opline, opline->op2));
} else {
@@ -1887,7 +1885,6 @@ propagate_arg:
ssa_var_info[v].type = MAY_BE_UNDEF | MAY_BE_RC1 | MAY_BE_RCN | MAY_BE_REF | MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF;
}
if (!(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS)
- && op_array->opcodes[0].opcode != ZEND_EXT_NOP
&& i < op_array->num_args) {
/* Propagate argument type */
ssa_var_info[v].type &= STACK_INFO(frame->stack, i);
@@ -5323,7 +5320,6 @@ done:
|| prev_opline->opcode == ZEND_CHECK_UNDEF_ARGS)
&& p->op_array->num_args
&& (p->op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS) == 0
- && (p->op_array->opcodes[0].opcode != ZEND_EXT_NOP)
&& ((p+1)->op == ZEND_JIT_TRACE_VM
|| (p+1)->op == ZEND_JIT_TRACE_END)
&& TRACE_FRAME_NUM_ARGS(call) < p->op_array->num_args
@@ -6814,9 +6810,6 @@ static int zend_jit_setup_hot_trace_counters(zend_op_array *op_array)
ZEND_ASSERT(zend_jit_func_trace_counter_handler != NULL);
opline = op_array->opcodes;
if (!(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS)) {
- if (opline->opcode == ZEND_EXT_NOP) {
- opline++;
- }
while (opline->opcode == ZEND_RECV || opline->opcode == ZEND_RECV_INIT) {
opline++;
}
diff --git a/ext/opcache/jit/zend_jit_x86.dasc b/ext/opcache/jit/zend_jit_x86.dasc
index befc6717d9..daff6fb641 100644
--- a/ext/opcache/jit/zend_jit_x86.dasc
+++ b/ext/opcache/jit/zend_jit_x86.dasc
@@ -12199,8 +12199,7 @@ static int zend_jit_recv_init(dasm_State **Dst, const zend_op *opline, const zen
zend_jit_addr res_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->result.var);
if (JIT_G(trigger) != ZEND_JIT_ON_HOT_TRACE ||
- (op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS) ||
- op_array->opcodes[0].opcode == ZEND_EXT_NOP) {
+ (op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS)) {
| cmp dword EX->This.u2.num_args, arg_num
| jae >5
}
diff --git a/sapi/phpdbg/phpdbg.c b/sapi/phpdbg/phpdbg.c
index 4629f94986..54d06a84c7 100644
--- a/sapi/phpdbg/phpdbg.c
+++ b/sapi/phpdbg/phpdbg.c
@@ -482,7 +482,8 @@ static zend_always_inline zend_bool phpdbg_is_ignored_opcode(zend_uchar opcode)
|| opcode == ZEND_DECLARE_CONST || opcode == ZEND_DECLARE_CLASS || opcode == ZEND_DECLARE_FUNCTION
|| opcode == ZEND_DECLARE_CLASS_DELAYED
|| opcode == ZEND_DECLARE_ANON_CLASS || opcode == ZEND_FAST_RET || opcode == ZEND_TICKS
- || opcode == ZEND_EXT_STMT || opcode == ZEND_EXT_FCALL_BEGIN || opcode == ZEND_EXT_FCALL_END || opcode == ZEND_EXT_NOP || opcode == ZEND_BIND_GLOBAL
+ || opcode == ZEND_EXT_STMT || opcode == ZEND_EXT_FCALL_BEGIN || opcode == ZEND_EXT_FCALL_END
+ || opcode == ZEND_BIND_GLOBAL
;
}