Skip to content

Commit 2068ce9

Browse files
committed
Use RT_CONSTANT() or CT_CONSTANT() macro depending on ZEND_ACC_DONE_PASS_TWO flag
1 parent 85c8c5b commit 2068ce9

14 files changed

+201
-200
lines changed

ext/opcache/Optimizer/escape_analysis.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ static int is_allocation_def(zend_op_array *op_array, zend_ssa *ssa, int def, in
176176
case ZEND_NEW:
177177
/* objects with destructors should escape */
178178
if (opline->op1_type == IS_CONST) {
179-
zend_class_entry *ce = get_class_entry(script, Z_STR_P(CRT_CONSTANT_EX(op_array, opline, opline->op1, ssa->rt_constants)+1));
179+
zend_class_entry *ce = get_class_entry(script, Z_STR_P(CRT_CONSTANT(opline->op1)+1));
180180
uint32_t forbidden_flags = ZEND_ACC_INHERITED
181181
/* These flags will always cause an exception */
182182
| ZEND_ACC_IMPLICIT_ABSTRACT_CLASS | ZEND_ACC_EXPLICIT_ABSTRACT_CLASS
@@ -191,7 +191,7 @@ static int is_allocation_def(zend_op_array *op_array, zend_ssa *ssa, int def, in
191191
break;
192192
case ZEND_QM_ASSIGN:
193193
if (opline->op1_type == IS_CONST
194-
&& Z_TYPE_P(CRT_CONSTANT_EX(op_array, opline, opline->op1, ssa->rt_constants)) == IS_ARRAY) {
194+
&& Z_TYPE_P(CRT_CONSTANT(opline->op1)) == IS_ARRAY) {
195195
return 1;
196196
}
197197
if (opline->op1_type == IS_CV && (OP1_INFO() & MAY_BE_ARRAY)) {
@@ -208,7 +208,7 @@ static int is_allocation_def(zend_op_array *op_array, zend_ssa *ssa, int def, in
208208
switch (opline->opcode) {
209209
case ZEND_ASSIGN:
210210
if (opline->op2_type == IS_CONST
211-
&& Z_TYPE_P(CRT_CONSTANT_EX(op_array, opline, opline->op2, ssa->rt_constants)) == IS_ARRAY) {
211+
&& Z_TYPE_P(CRT_CONSTANT(opline->op2)) == IS_ARRAY) {
212212
return 1;
213213
}
214214
if (opline->op2_type == IS_CV && (OP2_INFO() & MAY_BE_ARRAY)) {
@@ -245,7 +245,7 @@ static int is_local_def(zend_op_array *op_array, zend_ssa *ssa, int def, int var
245245
case ZEND_NEW:
246246
/* objects with destructors should escape */
247247
if (opline->op1_type == IS_CONST) {
248-
zend_class_entry *ce = get_class_entry(script, Z_STR_P(CRT_CONSTANT_EX(op_array, opline, opline->op1, ssa->rt_constants)+1));
248+
zend_class_entry *ce = get_class_entry(script, Z_STR_P(CRT_CONSTANT(opline->op1)+1));
249249
if (ce && !ce->create_object && !ce->constructor &&
250250
!ce->destructor && !ce->__get && !ce->__set &&
251251
!(ce->ce_flags & ZEND_ACC_INHERITED)) {

ext/opcache/Optimizer/optimize_func_calls.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ static void zend_try_inline_call(zend_op_array *op_array, zend_op *fcall, zend_o
126126
i = fcall->extended_value;
127127

128128
do {
129-
if (Z_TYPE_P(RT_CONSTANT(&func->op_array.opcodes[i], func->op_array.opcodes[i].op2)) == IS_CONSTANT_AST) {
129+
if (Z_TYPE_P(CRT_CONSTANT_EX(&func->op_array, &func->op_array.opcodes[i], func->op_array.opcodes[i].op2)) == IS_CONSTANT_AST) {
130130
return;
131131
}
132132
i++;
@@ -136,7 +136,7 @@ static void zend_try_inline_call(zend_op_array *op_array, zend_op *fcall, zend_o
136136
if (RETURN_VALUE_USED(opline)) {
137137
zval zv;
138138

139-
ZVAL_COPY(&zv, RT_CONSTANT(ret_opline, ret_opline->op1));
139+
ZVAL_COPY(&zv, CRT_CONSTANT_EX(&func->op_array, ret_opline, ret_opline->op1));
140140
opline->opcode = ZEND_QM_ASSIGN;
141141
opline->op1_type = IS_CONST;
142142
opline->op1.constant = zend_optimizer_add_literal(op_array, &zv);
@@ -173,7 +173,7 @@ void zend_optimize_func_calls(zend_op_array *op_array, zend_optimizer_ctx *ctx)
173173
case ZEND_INIT_FCALL:
174174
case ZEND_NEW:
175175
call_stack[call].func = zend_optimizer_get_called_func(
176-
ctx->script, op_array, opline, 0);
176+
ctx->script, op_array, opline);
177177
call_stack[call].try_inline = opline->opcode != ZEND_NEW;
178178
/* break missing intentionally */
179179
case ZEND_INIT_DYNAMIC_CALL:

ext/opcache/Optimizer/zend_call_graph.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ int zend_analyze_calls(zend_arena **arena, zend_script *script, uint32_t build_f
103103
case ZEND_INIT_STATIC_METHOD_CALL:
104104
call_stack[call] = call_info;
105105
func = zend_optimizer_get_called_func(
106-
script, op_array, opline, (build_flags & ZEND_RT_CONSTANTS) != 0);
106+
script, op_array, opline);
107107
if (func) {
108108
call_info = zend_arena_calloc(arena, 1, sizeof(zend_call_info) + (sizeof(zend_send_arg_info) * ((int)opline->extended_value - 1)));
109109
call_info->caller_op_array = op_array;
@@ -267,12 +267,12 @@ int zend_build_call_graph(zend_arena **arena, zend_script *script, zend_call_gra
267267
}
268268
/* }}} */
269269

270-
void zend_analyze_call_graph(zend_arena **arena, zend_script *script, uint32_t build_flags, zend_call_graph *call_graph) /* {{{ */
270+
void zend_analyze_call_graph(zend_arena **arena, zend_script *script, zend_call_graph *call_graph) /* {{{ */
271271
{
272272
int i;
273273

274274
for (i = 0; i < call_graph->op_arrays_count; i++) {
275-
zend_analyze_calls(arena, script, build_flags, call_graph->op_arrays[i], call_graph->func_infos + i);
275+
zend_analyze_calls(arena, script, 0, call_graph->op_arrays[i], call_graph->func_infos + i);
276276
}
277277
zend_analyze_recursion(call_graph);
278278
zend_sort_op_arrays(call_graph);

ext/opcache/Optimizer/zend_call_graph.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ typedef struct _zend_call_graph {
7070
BEGIN_EXTERN_C()
7171

7272
int zend_build_call_graph(zend_arena **arena, zend_script *script, zend_call_graph *call_graph);
73-
void zend_analyze_call_graph(zend_arena **arena, zend_script *script, uint32_t build_flags, zend_call_graph *call_graph);
73+
void zend_analyze_call_graph(zend_arena **arena, zend_script *script, zend_call_graph *call_graph);
7474
zend_call_info **zend_build_call_map(zend_arena **arena, zend_func_info *info, zend_op_array *op_array);
7575
int zend_analyze_calls(zend_arena **arena, zend_script *script, uint32_t build_flags, zend_op_array *op_array, zend_func_info *func_info);
7676

ext/opcache/Optimizer/zend_cfg.h

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,6 @@ typedef struct _zend_cfg {
9292
} zend_cfg;
9393

9494
/* Build Flags */
95-
#define ZEND_RT_CONSTANTS (1U<<31)
9695
#define ZEND_CFG_STACKLESS (1<<30)
9796
#define ZEND_SSA_DEBUG_LIVENESS (1<<29)
9897
#define ZEND_SSA_DEBUG_PHI_PLACEMENT (1<<28)
@@ -102,15 +101,15 @@ typedef struct _zend_cfg {
102101
#define ZEND_CALL_TREE (1<<23)
103102
#define ZEND_SSA_USE_CV_RESULTS (1<<22)
104103

105-
#define CRT_CONSTANT_EX(op_array, opline, node, rt_constants) \
106-
((rt_constants) ? \
104+
#define CRT_CONSTANT_EX(op_array, opline, node) \
105+
(((op_array)->fn_flags & ZEND_ACC_DONE_PASS_TWO) ? \
107106
RT_CONSTANT(opline, (node)) \
108107
: \
109108
CT_CONSTANT_EX(op_array, (node).constant) \
110109
)
111110

112111
#define CRT_CONSTANT(node) \
113-
CRT_CONSTANT_EX(op_array, opline, node, (build_flags & ZEND_RT_CONSTANTS))
112+
CRT_CONSTANT_EX(op_array, opline, node)
114113

115114
#define RETURN_VALUE_USED(opline) \
116115
((opline)->result_type != IS_UNUSED)

ext/opcache/Optimizer/zend_dump.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -585,7 +585,7 @@ static void zend_dump_op(const zend_op_array *op_array, const zend_basic_block *
585585
}
586586

587587
if (opline->op1_type == IS_CONST) {
588-
zend_dump_const(CRT_CONSTANT_EX(op_array, opline, opline->op1, (dump_flags & ZEND_DUMP_RT_CONSTANTS)));
588+
zend_dump_const(CRT_CONSTANT(opline->op1));
589589
} else if (opline->op1_type & (IS_CV|IS_VAR|IS_TMP_VAR)) {
590590
if (ssa && ssa->ops) {
591591
int ssa_var_num = ssa->ops[opline - op_array->opcodes].op1_use;
@@ -621,7 +621,7 @@ static void zend_dump_op(const zend_op_array *op_array, const zend_basic_block *
621621
}
622622

623623
if (opline->op2_type == IS_CONST) {
624-
zval *op = CRT_CONSTANT_EX(op_array, opline, opline->op2, (dump_flags & ZEND_DUMP_RT_CONSTANTS));
624+
zval *op = CRT_CONSTANT(opline->op2);
625625
if (opline->opcode == ZEND_SWITCH_LONG || opline->opcode == ZEND_SWITCH_STRING) {
626626
HashTable *jumptable = Z_ARRVAL_P(op);
627627
zend_string *key;
@@ -687,7 +687,7 @@ static void zend_dump_op(const zend_op_array *op_array, const zend_basic_block *
687687
}
688688
}
689689
if (opline->result_type == IS_CONST) {
690-
zend_dump_const(CRT_CONSTANT_EX(op_array, opline, opline->result, (dump_flags & ZEND_DUMP_RT_CONSTANTS)));
690+
zend_dump_const(CRT_CONSTANT(opline->result));
691691
#if 0
692692
} else if (opline->result_type & IS_SMART_BRANCH_JMPZ) {
693693
fprintf(stderr, " jmpz");

ext/opcache/Optimizer/zend_func_info.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1222,7 +1222,7 @@ uint32_t zend_get_func_info(const zend_call_info *call_info, const zend_ssa *ssa
12221222

12231223
if (callee_func->type == ZEND_INTERNAL_FUNCTION) {
12241224
zval *zv;
1225-
zend_string *lcname = Z_STR_P(CRT_CONSTANT_EX(call_info->caller_op_array, call_info->caller_init_opline, call_info->caller_init_opline->op2, ssa->rt_constants));
1225+
zend_string *lcname = Z_STR_P(CRT_CONSTANT_EX(call_info->caller_op_array, call_info->caller_init_opline, call_info->caller_init_opline->op2));
12261226

12271227
zv = zend_hash_find_ex(&func_info, lcname, 1);
12281228
if (zv) {

ext/opcache/Optimizer/zend_inference.c

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2314,7 +2314,7 @@ static zend_property_info *zend_fetch_prop_info(const zend_op_array *op_array, z
23142314
}
23152315
if (ce) {
23162316
prop_info = lookup_prop_info(ce,
2317-
Z_STR_P(CRT_CONSTANT_EX(op_array, opline, opline->op2, ssa->rt_constants)),
2317+
Z_STR_P(CRT_CONSTANT(opline->op2)),
23182318
op_array->scope);
23192319
if (prop_info && (prop_info->flags & ZEND_ACC_STATIC)) {
23202320
prop_info = NULL;
@@ -2345,12 +2345,12 @@ static zend_property_info *zend_fetch_static_prop_info(const zend_script *script
23452345
break;
23462346
}
23472347
} else if (opline->op2_type == IS_CONST) {
2348-
zval *zv = CRT_CONSTANT_EX(op_array, opline, opline->op2, ssa->rt_constants);
2348+
zval *zv = CRT_CONSTANT(opline->op2);
23492349
ce = get_class_entry(script, Z_STR_P(zv + 1));
23502350
}
23512351

23522352
if (ce) {
2353-
zval *zv = CRT_CONSTANT_EX(op_array, opline, opline->op1, ssa->rt_constants);
2353+
zval *zv = CRT_CONSTANT(opline->op1);
23542354
prop_info = lookup_prop_info(ce, Z_STR_P(zv), op_array->scope);
23552355
if (prop_info && !(prop_info->flags & ZEND_ACC_STATIC)) {
23562356
prop_info = NULL;
@@ -3136,7 +3136,7 @@ static int zend_update_type_info(const zend_op_array *op_array,
31363136
}
31373137
case ZEND_DECLARE_ANON_CLASS:
31383138
UPDATE_SSA_TYPE(MAY_BE_CLASS, ssa_ops[i].result_def);
3139-
if (script && (ce = zend_hash_find_ptr(&script->class_table, Z_STR_P(CRT_CONSTANT_EX(op_array, opline, opline->op1, ssa->rt_constants)))) != NULL) {
3139+
if (script && (ce = zend_hash_find_ptr(&script->class_table, Z_STR_P(CRT_CONSTANT(opline->op1)))) != NULL) {
31403140
UPDATE_SSA_OBJ_TYPE(ce, 0, ssa_ops[i].result_def);
31413141
}
31423142
break;
@@ -3164,7 +3164,7 @@ static int zend_update_type_info(const zend_op_array *op_array,
31643164
break;
31653165
}
31663166
} else if (opline->op2_type == IS_CONST) {
3167-
zval *zv = CRT_CONSTANT_EX(op_array, opline, opline->op2, ssa->rt_constants);
3167+
zval *zv = CRT_CONSTANT(opline->op2);
31683168
if (Z_TYPE_P(zv) == IS_STRING) {
31693169
ce = get_class_entry(script, Z_STR_P(zv+1));
31703170
UPDATE_SSA_OBJ_TYPE(ce, 0, ssa_ops[i].result_def);
@@ -3178,7 +3178,7 @@ static int zend_update_type_info(const zend_op_array *op_array,
31783178
case ZEND_NEW:
31793179
tmp = MAY_BE_RC1|MAY_BE_RCN|MAY_BE_OBJECT;
31803180
if (opline->op1_type == IS_CONST &&
3181-
(ce = get_class_entry(script, Z_STR_P(CRT_CONSTANT_EX(op_array, opline, opline->op1, ssa->rt_constants)+1))) != NULL) {
3181+
(ce = get_class_entry(script, Z_STR_P(CRT_CONSTANT(opline->op1)+1))) != NULL) {
31823182
UPDATE_SSA_OBJ_TYPE(ce, 0, ssa_ops[i].result_def);
31833183
} else if ((t1 & MAY_BE_CLASS) && ssa_ops[i].op1_use >= 0 && ssa_var_info[ssa_ops[i].op1_use].ce) {
31843184
UPDATE_SSA_OBJ_TYPE(ssa_var_info[ssa_ops[i].op1_use].ce, ssa_var_info[ssa_ops[i].op1_use].is_instanceof, ssa_ops[i].result_def);
@@ -3845,7 +3845,7 @@ static zend_bool can_convert_to_double(
38453845
ZVAL_COPY_VALUE(&orig_op1, value);
38463846
ZVAL_DOUBLE(&dval_op1, (double) Z_LVAL_P(value));
38473847
} else if (opline->op1_type == IS_CONST) {
3848-
zval *zv = CRT_CONSTANT_EX(op_array, opline, opline->op1, ssa->rt_constants);
3848+
zval *zv = CRT_CONSTANT(opline->op1);
38493849
if (Z_TYPE_P(zv) == IS_LONG || Z_TYPE_P(zv) == IS_DOUBLE) {
38503850
ZVAL_COPY_VALUE(&orig_op1, zv);
38513851
ZVAL_COPY_VALUE(&dval_op1, zv);
@@ -3858,7 +3858,7 @@ static zend_bool can_convert_to_double(
38583858
ZVAL_COPY_VALUE(&orig_op2, value);
38593859
ZVAL_DOUBLE(&dval_op2, (double) Z_LVAL_P(value));
38603860
} else if (opline->op2_type == IS_CONST) {
3861-
zval *zv = CRT_CONSTANT_EX(op_array, opline, opline->op2, ssa->rt_constants);
3861+
zval *zv = CRT_CONSTANT(opline->op2);
38623862
if (Z_TYPE_P(zv) == IS_LONG || Z_TYPE_P(zv) == IS_DOUBLE) {
38633863
ZVAL_COPY_VALUE(&orig_op2, zv);
38643864
ZVAL_COPY_VALUE(&dval_op2, zv);
@@ -3946,7 +3946,7 @@ static int zend_type_narrowing(const zend_op_array *op_array, const zend_script
39463946
* doubles instead, in the hope that we'll narrow long|double to double. */
39473947
if (opline->opcode == ZEND_ASSIGN && opline->result_type == IS_UNUSED &&
39483948
opline->op1_type == IS_CV && opline->op2_type == IS_CONST) {
3949-
zval *value = CRT_CONSTANT_EX(op_array, opline, opline->op2, ssa->rt_constants);
3949+
zval *value = CRT_CONSTANT(opline->op2);
39503950

39513951
zend_bitset_clear(visited, bitset_len);
39523952
if (can_convert_to_double(op_array, ssa, v, value, visited)) {
@@ -4098,7 +4098,7 @@ void zend_func_return_info(const zend_op_array *op_array,
40984098
}
40994099

41004100
if (opline->op1_type == IS_CONST) {
4101-
zval *zv = CRT_CONSTANT_EX(op_array, opline, opline->op1, info->ssa.rt_constants);
4101+
zval *zv = CRT_CONSTANT(opline->op1);
41024102

41034103
if (Z_TYPE_P(zv) == IS_NULL) {
41044104
if (tmp_has_range < 0) {
@@ -4577,7 +4577,7 @@ int zend_may_throw(const zend_op *opline, zend_op_array *op_array, zend_ssa *ssa
45774577

45784578
if (opline->op2_type == IS_CONST) {
45794579
prop_info = zend_hash_find_ptr(&ce->properties_info,
4580-
Z_STR_P(CRT_CONSTANT_EX(op_array, opline, opline->op2, ssa->rt_constants)));
4580+
Z_STR_P(CRT_CONSTANT(opline->op2)));
45814581
if (prop_info && !(prop_info->flags & ZEND_ACC_PUBLIC)) {
45824582
return 1;
45834583
}
@@ -4607,7 +4607,7 @@ int zend_may_throw(const zend_op *opline, zend_op_array *op_array, zend_ssa *ssa
46074607
case ZEND_COUNT:
46084608
return (t1 & MAY_BE_ANY) != MAY_BE_ARRAY;
46094609
case ZEND_RECV_INIT:
4610-
if (Z_TYPE_P(CRT_CONSTANT_EX(op_array, opline, opline->op2, ssa->rt_constants)) == IS_CONSTANT_AST) {
4610+
if (Z_TYPE_P(CRT_CONSTANT(opline->op2)) == IS_CONSTANT_AST) {
46114611
return 1;
46124612
}
46134613
if (op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS) {

ext/opcache/Optimizer/zend_inference.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
static zend_always_inline zend_bool _ssa_##opN##_has_range(const zend_op_array *op_array, const zend_ssa *ssa, const zend_op *opline) \
4141
{ \
4242
if (opline->opN##_type == IS_CONST) { \
43-
zval *zv = CRT_CONSTANT_EX(op_array, opline, opline->opN, ssa->rt_constants); \
43+
zval *zv = CRT_CONSTANT(opline->opN); \
4444
return (Z_TYPE_P(zv) == IS_LONG || Z_TYPE_P(zv) == IS_TRUE || Z_TYPE_P(zv) == IS_FALSE || Z_TYPE_P(zv) == IS_NULL); \
4545
} else { \
4646
return (opline->opN##_type != IS_UNUSED && \
@@ -56,7 +56,7 @@
5656
static zend_always_inline zend_long _ssa_##opN##_min_range(const zend_op_array *op_array, const zend_ssa *ssa, const zend_op *opline) \
5757
{ \
5858
if (opline->opN##_type == IS_CONST) { \
59-
zval *zv = CRT_CONSTANT_EX(op_array, opline, opline->opN, ssa->rt_constants); \
59+
zval *zv = CRT_CONSTANT(opline->opN); \
6060
if (Z_TYPE_P(zv) == IS_LONG) { \
6161
return Z_LVAL_P(zv); \
6262
} else if (Z_TYPE_P(zv) == IS_TRUE) { \
@@ -80,7 +80,7 @@
8080
static zend_always_inline zend_long _ssa_##opN##_max_range(const zend_op_array *op_array, const zend_ssa *ssa, const zend_op *opline) \
8181
{ \
8282
if (opline->opN##_type == IS_CONST) { \
83-
zval *zv = CRT_CONSTANT_EX(op_array, opline, opline->opN, ssa->rt_constants); \
83+
zval *zv = CRT_CONSTANT(opline->opN); \
8484
if (Z_TYPE_P(zv) == IS_LONG) { \
8585
return Z_LVAL_P(zv); \
8686
} else if (Z_TYPE_P(zv) == IS_TRUE) { \
@@ -104,7 +104,7 @@
104104
static zend_always_inline char _ssa_##opN##_range_underflow(const zend_op_array *op_array, const zend_ssa *ssa, const zend_op *opline) \
105105
{ \
106106
if (opline->opN##_type == IS_CONST) { \
107-
zval *zv = CRT_CONSTANT_EX(op_array, opline, opline->opN, ssa->rt_constants); \
107+
zval *zv = CRT_CONSTANT(opline->opN); \
108108
if (Z_TYPE_P(zv) == IS_LONG || Z_TYPE_P(zv) == IS_TRUE || Z_TYPE_P(zv) == IS_FALSE || Z_TYPE_P(zv) == IS_NULL) { \
109109
return 0; \
110110
} \
@@ -122,7 +122,7 @@
122122
static zend_always_inline char _ssa_##opN##_range_overflow(const zend_op_array *op_array, const zend_ssa *ssa, const zend_op *opline) \
123123
{ \
124124
if (opline->opN##_type == IS_CONST) { \
125-
zval *zv = CRT_CONSTANT_EX(op_array, opline, opline->opN, ssa->rt_constants); \
125+
zval *zv = CRT_CONSTANT(opline->opN); \
126126
if (Z_TYPE_P(zv) == IS_LONG || Z_TYPE_P(zv) == IS_TRUE || Z_TYPE_P(zv) == IS_FALSE || Z_TYPE_P(zv) == IS_NULL) { \
127127
return 0; \
128128
} \
@@ -207,7 +207,7 @@ static zend_always_inline uint32_t get_ssa_var_info(const zend_ssa *ssa, int ssa
207207
static zend_always_inline uint32_t _ssa_##opN##_info(const zend_op_array *op_array, const zend_ssa *ssa, const zend_op *opline) \
208208
{ \
209209
if (opline->opN##_type == IS_CONST) { \
210-
return _const_op_type(CRT_CONSTANT_EX(op_array, opline, opline->opN, ssa->rt_constants)); \
210+
return _const_op_type(CRT_CONSTANT(opline->opN)); \
211211
} else { \
212212
return get_ssa_var_info(ssa, ssa->ops ? ssa->ops[opline - op_array->opcodes].opN##_use : -1); \
213213
} \

0 commit comments

Comments
 (0)