Skip to content

Commit 22b5569

Browse files
committed
Zend/Optimizer/zend_inference: add const qualifiers
1 parent 1b90c2c commit 22b5569

File tree

2 files changed

+40
-41
lines changed

2 files changed

+40
-41
lines changed

Zend/Optimizer/zend_inference.c

Lines changed: 38 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -266,7 +266,7 @@ typedef struct _zend_scc_iterator {
266266
};
267267
} zend_scc_iterator;
268268

269-
static int zend_scc_next(const zend_op_array *op_array, zend_ssa *ssa, int var, zend_scc_iterator *iterator) /* {{{ */
269+
static int zend_scc_next(const zend_op_array *op_array, const zend_ssa *ssa, int var, zend_scc_iterator *iterator) /* {{{ */
270270
{
271271
zend_ssa_phi *phi;
272272
int use, var2;
@@ -487,14 +487,14 @@ ZEND_API void zend_ssa_find_sccs(const zend_op_array *op_array, zend_ssa *ssa) /
487487

488488
#endif
489489

490-
ZEND_API void zend_ssa_find_false_dependencies(const zend_op_array *op_array, zend_ssa *ssa) /* {{{ */
490+
ZEND_API void zend_ssa_find_false_dependencies(const zend_op_array *op_array, const zend_ssa *ssa) /* {{{ */
491491
{
492492
zend_ssa_var *ssa_vars = ssa->vars;
493-
zend_ssa_op *ssa_ops = ssa->ops;
493+
const zend_ssa_op *ssa_ops = ssa->ops;
494494
int ssa_vars_count = ssa->vars_count;
495495
zend_bitset worklist;
496496
int i, j, use;
497-
zend_ssa_phi *p;
497+
const zend_ssa_phi *p;
498498
ALLOCA_FLAG(use_heap);
499499

500500
if (!op_array->function_name || !ssa->vars || !ssa->ops) {
@@ -1597,7 +1597,7 @@ ZEND_API bool zend_inference_propagate_range(const zend_op_array *op_array, cons
15971597
return 0;
15981598
}
15991599

1600-
static void zend_inference_init_range(const zend_op_array *op_array, zend_ssa *ssa, int var, bool underflow, zend_long min, zend_long max, bool overflow)
1600+
static void zend_inference_init_range(const zend_op_array *op_array, const zend_ssa *ssa, int var, bool underflow, zend_long min, zend_long max, bool overflow)
16011601
{
16021602
if (underflow) {
16031603
min = ZEND_LONG_MIN;
@@ -1645,7 +1645,7 @@ static bool zend_inference_widening_meet(zend_ssa_var_info *var_info, zend_ssa_r
16451645
return 1;
16461646
}
16471647

1648-
static bool zend_ssa_range_widening(const zend_op_array *op_array, zend_ssa *ssa, int var, int scc)
1648+
static bool zend_ssa_range_widening(const zend_op_array *op_array, const zend_ssa *ssa, int var, int scc)
16491649
{
16501650
zend_ssa_range tmp;
16511651

@@ -1690,7 +1690,7 @@ static bool zend_inference_narrowing_meet(zend_ssa_var_info *var_info, zend_ssa_
16901690
return 1;
16911691
}
16921692

1693-
static bool zend_ssa_range_narrowing(const zend_op_array *op_array, zend_ssa *ssa, int var, int scc)
1693+
static bool zend_ssa_range_narrowing(const zend_op_array *op_array, const zend_ssa *ssa, int var, int scc)
16941694
{
16951695
zend_ssa_range tmp;
16961696

@@ -2029,18 +2029,18 @@ static uint32_t get_ssa_alias_types(zend_ssa_alias_kind alias) {
20292029
} \
20302030
} while (0)
20312031

2032-
static void add_usages(const zend_op_array *op_array, zend_ssa *ssa, zend_bitset worklist, int var)
2032+
static void add_usages(const zend_op_array *op_array, const zend_ssa *ssa, zend_bitset worklist, int var)
20332033
{
20342034
if (ssa->vars[var].phi_use_chain) {
2035-
zend_ssa_phi *p = ssa->vars[var].phi_use_chain;
2035+
const zend_ssa_phi *p = ssa->vars[var].phi_use_chain;
20362036
do {
20372037
zend_bitset_incl(worklist, p->ssa_var);
20382038
p = zend_ssa_next_use_phi(ssa, var, p);
20392039
} while (p);
20402040
}
20412041
if (ssa->vars[var].use_chain >= 0) {
20422042
int use = ssa->vars[var].use_chain;
2043-
zend_ssa_op *op;
2043+
const zend_ssa_op *op;
20442044

20452045
do {
20462046
op = ssa->ops + use;
@@ -2082,7 +2082,7 @@ static void add_usages(const zend_op_array *op_array, zend_ssa *ssa, zend_bitset
20822082
}
20832083
}
20842084

2085-
static void emit_type_narrowing_warning(const zend_op_array *op_array, zend_ssa *ssa, int var)
2085+
static void emit_type_narrowing_warning(const zend_op_array *op_array, const zend_ssa *ssa, int var)
20862086
{
20872087
int def_op_num = ssa->vars[var].definition;
20882088
const zend_op *def_opline = def_op_num >= 0 ? &op_array->opcodes[def_op_num] : NULL;
@@ -2258,7 +2258,7 @@ static uint32_t assign_dim_result_type(
22582258

22592259
/* For binary ops that have compound assignment operators */
22602260
static uint32_t binary_op_result_type(
2261-
zend_ssa *ssa, uint8_t opcode, uint32_t t1, uint32_t t2, int result_var,
2261+
const zend_ssa *ssa, uint8_t opcode, uint32_t t1, uint32_t t2, int result_var,
22622262
zend_long optimization_level) {
22632263
uint32_t tmp = 0;
22642264
uint32_t t1_type = (t1 & MAY_BE_ANY) | (t1 & MAY_BE_UNDEF ? MAY_BE_NULL : 0);
@@ -2435,7 +2435,7 @@ static const zend_property_info *lookup_prop_info(const zend_class_entry *ce, ze
24352435
return NULL;
24362436
}
24372437

2438-
static const zend_property_info *zend_fetch_prop_info(const zend_op_array *op_array, zend_ssa *ssa, const zend_op *opline, const zend_ssa_op *ssa_op)
2438+
static const zend_property_info *zend_fetch_prop_info(const zend_op_array *op_array, const zend_ssa *ssa, const zend_op *opline, const zend_ssa_op *ssa_op)
24392439
{
24402440
const zend_property_info *prop_info = NULL;
24412441
if (opline->op2_type == IS_CONST) {
@@ -2462,7 +2462,7 @@ static const zend_property_info *zend_fetch_static_prop_info(const zend_script *
24622462
{
24632463
const zend_property_info *prop_info = NULL;
24642464
if (opline->op1_type == IS_CONST) {
2465-
zend_class_entry *ce = NULL;
2465+
const zend_class_entry *ce = NULL;
24662466
if (opline->op2_type == IS_UNUSED) {
24672467
uint32_t fetch_type = opline->op2.num & ZEND_FETCH_CLASS_MASK;
24682468
switch (fetch_type) {
@@ -2479,12 +2479,12 @@ static const zend_property_info *zend_fetch_static_prop_info(const zend_script *
24792479
break;
24802480
}
24812481
} else if (opline->op2_type == IS_CONST) {
2482-
zval *zv = CRT_CONSTANT(opline->op2);
2482+
const zval *zv = CRT_CONSTANT(opline->op2);
24832483
ce = zend_optimizer_get_class_entry(script, op_array, Z_STR_P(zv + 1));
24842484
}
24852485

24862486
if (ce) {
2487-
zval *zv = CRT_CONSTANT(opline->op1);
2487+
const zval *zv = CRT_CONSTANT(opline->op1);
24882488
prop_info = lookup_prop_info(ce, Z_STR_P(zv), op_array->scope);
24892489
if (prop_info && !(prop_info->flags & ZEND_ACC_STATIC)) {
24902490
prop_info = NULL;
@@ -2506,13 +2506,13 @@ static uint32_t zend_fetch_prop_type(const zend_script *script, const zend_prope
25062506
return zend_convert_type(script, prop_info->type, pce);
25072507
}
25082508

2509-
static bool result_may_be_separated(zend_ssa *ssa, zend_ssa_op *ssa_op)
2509+
static bool result_may_be_separated(const zend_ssa *ssa, const zend_ssa_op *ssa_op)
25102510
{
25112511
int tmp_var = ssa_op->result_def;
25122512

25132513
if (ssa->vars[tmp_var].use_chain >= 0
25142514
&& !ssa->vars[tmp_var].phi_use_chain) {
2515-
zend_ssa_op *use_op = &ssa->ops[ssa->vars[tmp_var].use_chain];
2515+
const zend_ssa_op *use_op = &ssa->ops[ssa->vars[tmp_var].use_chain];
25162516

25172517
/* TODO: analyze instructions between ssa_op and use_op */
25182518
if (use_op == ssa_op + 1) {
@@ -3028,7 +3028,7 @@ static zend_always_inline zend_result _zend_update_type_info(
30283028
break;
30293029
case ZEND_ASSIGN_OBJ:
30303030
if (opline->op1_type == IS_CV) {
3031-
zend_class_entry *ce = ssa_var_info[ssa_op->op1_use].ce;
3031+
const zend_class_entry *ce = ssa_var_info[ssa_op->op1_use].ce;
30323032
bool add_rc = (t1 & (MAY_BE_OBJECT|MAY_BE_REF)) && (!ce
30333033
|| ce->__set
30343034
/* Non-default write_property may be set within create_object. */
@@ -4120,7 +4120,7 @@ ZEND_API zend_result zend_update_type_info(
41204120
const zend_op_array *op_array,
41214121
zend_ssa *ssa,
41224122
const zend_script *script,
4123-
zend_op *opline,
4123+
const zend_op *opline,
41244124
zend_ssa_op *ssa_op,
41254125
const zend_op **ssa_opcodes,
41264126
zend_long optimization_level)
@@ -4129,7 +4129,7 @@ ZEND_API zend_result zend_update_type_info(
41294129
false);
41304130
}
41314131

4132-
static uint32_t get_class_entry_rank(zend_class_entry *ce) {
4132+
static uint32_t get_class_entry_rank(const zend_class_entry *ce) {
41334133
uint32_t rank = 0;
41344134
if (ce->ce_flags & ZEND_ACC_LINKED) {
41354135
while (ce->parent) {
@@ -4175,7 +4175,7 @@ static zend_class_entry *join_class_entries(
41754175
return ce1;
41764176
}
41774177

4178-
static bool safe_instanceof(zend_class_entry *ce1, zend_class_entry *ce2) {
4178+
static bool safe_instanceof(const zend_class_entry *ce1, const zend_class_entry *ce2) {
41794179
if (ce1 == ce2) {
41804180
return 1;
41814181
}
@@ -4188,7 +4188,7 @@ static bool safe_instanceof(zend_class_entry *ce1, zend_class_entry *ce2) {
41884188

41894189
static zend_result zend_infer_types_ex(const zend_op_array *op_array, const zend_script *script, zend_ssa *ssa, zend_bitset worklist, zend_long optimization_level)
41904190
{
4191-
zend_basic_block *blocks = ssa->cfg.blocks;
4191+
const zend_basic_block *blocks = ssa->cfg.blocks;
41924192
zend_ssa_var *ssa_vars = ssa->vars;
41934193
zend_ssa_var_info *ssa_var_info = ssa->var_info;
41944194
int ssa_vars_count = ssa->vars_count;
@@ -4208,7 +4208,7 @@ static zend_result zend_infer_types_ex(const zend_op_array *op_array, const zend
42084208
tmp = get_ssa_var_info(ssa, p->sources[0]);
42094209

42104210
if (!p->has_range_constraint) {
4211-
zend_ssa_type_constraint *constraint = &p->constraint.type;
4211+
const zend_ssa_type_constraint *constraint = &p->constraint.type;
42124212
tmp &= constraint->type_mask;
42134213
if (!(tmp & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) {
42144214
tmp &= ~(MAY_BE_RC1|MAY_BE_RCN);
@@ -4270,18 +4270,18 @@ static zend_result zend_infer_types_ex(const zend_op_array *op_array, const zend
42704270
return SUCCESS;
42714271
}
42724272

4273-
static bool is_narrowable_instr(zend_op *opline) {
4273+
static bool is_narrowable_instr(const zend_op *opline) {
42744274
return opline->opcode == ZEND_ADD || opline->opcode == ZEND_SUB
42754275
|| opline->opcode == ZEND_MUL || opline->opcode == ZEND_DIV;
42764276
}
42774277

4278-
static bool is_effective_op1_double_cast(zend_op *opline, zval *op2) {
4278+
static bool is_effective_op1_double_cast(const zend_op *opline, const zval *op2) {
42794279
return (opline->opcode == ZEND_ADD && Z_LVAL_P(op2) == 0)
42804280
|| (opline->opcode == ZEND_SUB && Z_LVAL_P(op2) == 0)
42814281
|| (opline->opcode == ZEND_MUL && Z_LVAL_P(op2) == 1)
42824282
|| (opline->opcode == ZEND_DIV && Z_LVAL_P(op2) == 1);
42834283
}
4284-
static bool is_effective_op2_double_cast(zend_op *opline, zval *op1) {
4284+
static bool is_effective_op2_double_cast(const zend_op *opline, const zval *op1) {
42854285
/* In PHP it holds that (double)(0-$int) is bitwise identical to 0.0-(double)$int,
42864286
* so allowing SUB here is fine. */
42874287
return (opline->opcode == ZEND_ADD && Z_LVAL_P(op1) == 0)
@@ -4493,19 +4493,18 @@ static zend_result zend_type_narrowing(const zend_op_array *op_array, const zend
44934493
return SUCCESS;
44944494
}
44954495

4496-
static bool is_recursive_tail_call(const zend_op_array *op_array,
4497-
zend_op *opline)
4496+
static bool is_recursive_tail_call(const zend_op_array *op_array, const zend_op *opline)
44984497
{
4499-
zend_func_info *info = ZEND_FUNC_INFO(op_array);
4498+
const zend_func_info *info = ZEND_FUNC_INFO(op_array);
45004499

45014500
if (info->ssa.ops && info->ssa.vars && info->call_map &&
45024501
info->ssa.ops[opline - op_array->opcodes].op1_use >= 0 &&
45034502
info->ssa.vars[info->ssa.ops[opline - op_array->opcodes].op1_use].definition >= 0) {
45044503

4505-
zend_op *op = op_array->opcodes + info->ssa.vars[info->ssa.ops[opline - op_array->opcodes].op1_use].definition;
4504+
const zend_op *op = op_array->opcodes + info->ssa.vars[info->ssa.ops[opline - op_array->opcodes].op1_use].definition;
45064505

45074506
if (op->opcode == ZEND_DO_UCALL) {
4508-
zend_call_info *call_info = info->call_map[op - op_array->opcodes];
4507+
const zend_call_info *call_info = info->call_map[op - op_array->opcodes];
45094508
if (call_info && op_array == &call_info->callee_func->op_array) {
45104509
return 1;
45114510
}
@@ -4521,7 +4520,7 @@ uint32_t zend_get_return_info_from_signature_only(
45214520
if (func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE &&
45224521
(use_tentative_return_info || !ZEND_ARG_TYPE_IS_TENTATIVE(func->common.arg_info - 1))
45234522
) {
4524-
zend_arg_info *ret_info = func->common.arg_info - 1;
4523+
const zend_arg_info *ret_info = func->common.arg_info - 1;
45254524
type = zend_fetch_arg_info_type(script, ret_info, ce);
45264525
*ce_is_instanceof = ce != NULL;
45274526
} else {
@@ -4561,10 +4560,10 @@ static void zend_func_return_info(const zend_op_array *op_array,
45614560
bool widening,
45624561
zend_ssa_var_info *ret)
45634562
{
4564-
zend_func_info *info = ZEND_FUNC_INFO(op_array);
4565-
zend_ssa *ssa = &info->ssa;
4563+
const zend_func_info *info = ZEND_FUNC_INFO(op_array);
4564+
const zend_ssa *ssa = &info->ssa;
45664565
int blocks_count = info->ssa.cfg.blocks_count;
4567-
zend_basic_block *blocks = info->ssa.cfg.blocks;
4566+
const zend_basic_block *blocks = info->ssa.cfg.blocks;
45684567
int j;
45694568
uint32_t t1;
45704569
uint32_t tmp = 0;
@@ -4595,7 +4594,7 @@ static void zend_func_return_info(const zend_op_array *op_array,
45954594
zend_op *opline = op_array->opcodes + blocks[j].start + blocks[j].len - 1;
45964595

45974596
if (opline->opcode == ZEND_RETURN || opline->opcode == ZEND_RETURN_BY_REF) {
4598-
zend_ssa_op *ssa_op = ssa->ops ? &ssa->ops[opline - op_array->opcodes] : NULL;
4597+
const zend_ssa_op *ssa_op = ssa->ops ? &ssa->ops[opline - op_array->opcodes] : NULL;
45994598
if (!recursive && ssa_op && info->ssa.var_info &&
46004599
ssa_op->op1_use >= 0 &&
46014600
info->ssa.var_info[ssa_op->op1_use].recursive) {
@@ -4642,7 +4641,7 @@ static void zend_func_return_info(const zend_op_array *op_array,
46424641
}
46434642

46444643
if (opline->op1_type == IS_CONST) {
4645-
zval *zv = CRT_CONSTANT(opline->op1);
4644+
const zval *zv = CRT_CONSTANT(opline->op1);
46464645

46474646
if (Z_TYPE_P(zv) == IS_LONG) {
46484647
if (tmp_has_range < 0) {
@@ -4745,7 +4744,7 @@ static zend_result zend_infer_types(const zend_op_array *op_array, const zend_sc
47454744
return SUCCESS;
47464745
}
47474746

4748-
static void zend_mark_cv_references(const zend_op_array *op_array, const zend_script *script, zend_ssa *ssa)
4747+
static void zend_mark_cv_references(const zend_op_array *op_array, const zend_script *script, const zend_ssa *ssa)
47494748
{
47504749
int var, def;
47514750
const zend_op *opline;

Zend/Optimizer/zend_inference.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ static zend_always_inline bool zend_sub_will_overflow(zend_long a, zend_long b)
217217

218218
BEGIN_EXTERN_C()
219219

220-
ZEND_API void zend_ssa_find_false_dependencies(const zend_op_array *op_array, zend_ssa *ssa);
220+
ZEND_API void zend_ssa_find_false_dependencies(const zend_op_array *op_array, const zend_ssa *ssa);
221221
ZEND_API void zend_ssa_find_sccs(const zend_op_array *op_array, zend_ssa *ssa);
222222
ZEND_API zend_result zend_ssa_inference(zend_arena **raena, const zend_op_array *op_array, const zend_script *script, zend_ssa *ssa, zend_long optimization_level);
223223

@@ -238,7 +238,7 @@ ZEND_API bool zend_may_throw(const zend_op *opline, const zend_ssa_op *ssa_op, c
238238

239239
ZEND_API zend_result zend_update_type_info(
240240
const zend_op_array *op_array, zend_ssa *ssa, const zend_script *script,
241-
zend_op *opline, zend_ssa_op *ssa_op, const zend_op **ssa_opcodes,
241+
const zend_op *opline, zend_ssa_op *ssa_op, const zend_op **ssa_opcodes,
242242
zend_long optimization_level);
243243

244244
END_EXTERN_C()

0 commit comments

Comments
 (0)