Skip to content

Commit e7830f3

Browse files
committed
Fix JIT
1 parent 26d0eb1 commit e7830f3

File tree

2 files changed

+50
-20
lines changed

2 files changed

+50
-20
lines changed

ext/opcache/jit/zend_jit.c

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1724,8 +1724,11 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op
17241724
on_this = 0;
17251725
if (opline->op1_type == IS_UNUSED) {
17261726
op1_info = MAY_BE_OBJECT|MAY_BE_RC1|MAY_BE_RCN;
1727-
ce = op_array->scope;
1728-
ce_is_instanceof = (ce->ce_flags & ZEND_ACC_FINAL) != 0;
1727+
/* scope is NULL for closures. */
1728+
if (op_array->scope) {
1729+
ce = op_array->scope;
1730+
ce_is_instanceof = (ce->ce_flags & ZEND_ACC_FINAL) != 0;
1731+
}
17291732
op1_addr = 0;
17301733
on_this = 1;
17311734
} else {
@@ -1772,8 +1775,11 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op
17721775
on_this = 0;
17731776
if (opline->op1_type == IS_UNUSED) {
17741777
op1_info = MAY_BE_OBJECT|MAY_BE_RC1|MAY_BE_RCN;
1775-
ce = op_array->scope;
1776-
ce_is_instanceof = (ce->ce_flags & ZEND_ACC_FINAL) != 0;
1778+
/* scope is NULL for closures. */
1779+
if (op_array->scope) {
1780+
ce = op_array->scope;
1781+
ce_is_instanceof = (ce->ce_flags & ZEND_ACC_FINAL) != 0;
1782+
}
17771783
op1_addr = 0;
17781784
on_this = 1;
17791785
} else {
@@ -1813,8 +1819,11 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op
18131819
on_this = 0;
18141820
if (opline->op1_type == IS_UNUSED) {
18151821
op1_info = MAY_BE_OBJECT|MAY_BE_RC1|MAY_BE_RCN;
1816-
ce = op_array->scope;
1817-
ce_is_instanceof = (ce->ce_flags & ZEND_ACC_FINAL) != 0;
1822+
/* scope is NULL for closures. */
1823+
if (op_array->scope) {
1824+
ce = op_array->scope;
1825+
ce_is_instanceof = (ce->ce_flags & ZEND_ACC_FINAL) != 0;
1826+
}
18181827
op1_addr = 0;
18191828
on_this = 1;
18201829
} else {
@@ -2283,8 +2292,11 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op
22832292
if (opline->op1_type == IS_UNUSED) {
22842293
op1_info = MAY_BE_OBJECT|MAY_BE_RC1|MAY_BE_RCN;
22852294
op1_addr = 0;
2286-
ce = op_array->scope;
2287-
ce_is_instanceof = (ce->ce_flags & ZEND_ACC_FINAL) != 0;
2295+
/* scope is NULL for closures. */
2296+
if (op_array->scope) {
2297+
ce = op_array->scope;
2298+
ce_is_instanceof = (ce->ce_flags & ZEND_ACC_FINAL) != 0;
2299+
}
22882300
on_this = 1;
22892301
} else {
22902302
op1_info = OP1_INFO();
@@ -2434,8 +2446,11 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op
24342446
if (opline->op1_type == IS_UNUSED) {
24352447
op1_info = MAY_BE_OBJECT|MAY_BE_RC1|MAY_BE_RCN;
24362448
op1_addr = 0;
2437-
ce = op_array->scope;
2438-
ce_is_instanceof = (ce->ce_flags & ZEND_ACC_FINAL) != 0;
2449+
/* scope is NULL for closures. */
2450+
if (op_array->scope) {
2451+
ce = op_array->scope;
2452+
ce_is_instanceof = (ce->ce_flags & ZEND_ACC_FINAL) != 0;
2453+
}
24392454
on_this = 1;
24402455
} else {
24412456
op1_info = OP1_INFO();

ext/opcache/jit/zend_jit_trace.c

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4652,8 +4652,11 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
46524652
op1_indirect = 0;
46534653
if (opline->op1_type == IS_UNUSED) {
46544654
op1_info = MAY_BE_OBJECT|MAY_BE_RC1|MAY_BE_RCN;
4655-
ce = op_array->scope;
4656-
ce_is_instanceof = (ce->ce_flags & ZEND_ACC_FINAL) != 0;
4655+
/* scope is NULL for closures. */
4656+
if (op_array->scope) {
4657+
ce = op_array->scope;
4658+
ce_is_instanceof = (ce->ce_flags & ZEND_ACC_FINAL) != 0;
4659+
}
46574660
op1_addr = 0;
46584661
on_this = 1;
46594662
} else {
@@ -4743,8 +4746,11 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
47434746
op1_indirect = 0;
47444747
if (opline->op1_type == IS_UNUSED) {
47454748
op1_info = MAY_BE_OBJECT|MAY_BE_RC1|MAY_BE_RCN;
4746-
ce = op_array->scope;
4747-
ce_is_instanceof = (ce->ce_flags & ZEND_ACC_FINAL) != 0;
4749+
/* scope is NULL for closures. */
4750+
if (op_array->scope) {
4751+
ce = op_array->scope;
4752+
ce_is_instanceof = (ce->ce_flags & ZEND_ACC_FINAL) != 0;
4753+
}
47484754
op1_addr = 0;
47494755
on_this = 1;
47504756
} else {
@@ -4823,8 +4829,11 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
48234829
op1_indirect = 0;
48244830
if (opline->op1_type == IS_UNUSED) {
48254831
op1_info = MAY_BE_OBJECT|MAY_BE_RC1|MAY_BE_RCN;
4826-
ce = op_array->scope;
4827-
ce_is_instanceof = (ce->ce_flags & ZEND_ACC_FINAL) != 0;
4832+
/* scope is NULL for closures. */
4833+
if (op_array->scope) {
4834+
ce = op_array->scope;
4835+
ce_is_instanceof = (ce->ce_flags & ZEND_ACC_FINAL) != 0;
4836+
}
48284837
op1_addr = 0;
48294838
on_this = 1;
48304839
} else {
@@ -5873,8 +5882,11 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
58735882
op1_indirect = 0;
58745883
if (opline->op1_type == IS_UNUSED) {
58755884
op1_info = MAY_BE_OBJECT|MAY_BE_RC1|MAY_BE_RCN;
5876-
ce = op_array->scope;
5877-
ce_is_instanceof = (ce->ce_flags & ZEND_ACC_FINAL) != 0;
5885+
/* scope is NULL for closures. */
5886+
if (op_array->scope) {
5887+
ce = op_array->scope;
5888+
ce_is_instanceof = (ce->ce_flags & ZEND_ACC_FINAL) != 0;
5889+
}
58785890
op1_addr = 0;
58795891
on_this = 1;
58805892
} else {
@@ -6152,8 +6164,11 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
61526164
ce_is_instanceof = 0;
61536165
if (opline->op1_type == IS_UNUSED) {
61546166
op1_info = MAY_BE_OBJECT|MAY_BE_RC1|MAY_BE_RCN;
6155-
ce = op_array->scope;
6156-
ce_is_instanceof = (ce->ce_flags & ZEND_ACC_FINAL) != 0;
6167+
/* scope is NULL for closures. */
6168+
if (op_array->scope) {
6169+
ce = op_array->scope;
6170+
ce_is_instanceof = (ce->ce_flags & ZEND_ACC_FINAL) != 0;
6171+
}
61576172
op1_addr = 0;
61586173
on_this = 1;
61596174
} else {

0 commit comments

Comments
 (0)