summaryrefslogtreecommitdiff
path: root/ext/opcache/Optimizer/zend_call_graph.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/opcache/Optimizer/zend_call_graph.c')
-rw-r--r--ext/opcache/Optimizer/zend_call_graph.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/ext/opcache/Optimizer/zend_call_graph.c b/ext/opcache/Optimizer/zend_call_graph.c
index 6bfbfc049d..51b307bf5e 100644
--- a/ext/opcache/Optimizer/zend_call_graph.c
+++ b/ext/opcache/Optimizer/zend_call_graph.c
@@ -177,6 +177,10 @@ int zend_analyze_calls(zend_arena **arena, zend_script *script, uint32_t build_f
call_info->num_args = -1;
}
break;
+ case ZEND_EXIT:
+ /* In this case the DO_CALL opcode may have been dropped
+ * and caller_call_opline will be NULL. */
+ break;
}
opline++;
}
@@ -291,7 +295,9 @@ zend_call_info **zend_build_call_map(zend_arena **arena, zend_func_info *info, c
for (call = info->callee_info; call; call = call->next_callee) {
int i;
map[call->caller_init_opline - op_array->opcodes] = call;
- map[call->caller_call_opline - op_array->opcodes] = call;
+ if (call->caller_call_opline) {
+ map[call->caller_call_opline - op_array->opcodes] = call;
+ }
for (i = 0; i < call->num_args; i++) {
if (call->arg_info[i].opline) {
map[call->arg_info[i].opline - op_array->opcodes] = call;