summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2017-09-25 12:03:47 +0300
committerDmitry Stogov <dmitry@zend.com>2017-09-25 12:03:47 +0300
commitd526ddec85cd7070a08c85cc258a55e5ee649fdd (patch)
tree3105236dee93aa60bf018f9909033245906204a5
parent634f79d8d85743a4b214f6dd70f7f78d214f7159 (diff)
downloadphp-git-d526ddec85cd7070a08c85cc258a55e5ee649fdd.tar.gz
Fixed type inference
-rw-r--r--ext/opcache/Optimizer/zend_inference.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/ext/opcache/Optimizer/zend_inference.c b/ext/opcache/Optimizer/zend_inference.c
index 508ba6c3a1..ecfb14ca37 100644
--- a/ext/opcache/Optimizer/zend_inference.c
+++ b/ext/opcache/Optimizer/zend_inference.c
@@ -2331,12 +2331,14 @@ static int zend_update_type_info(const zend_op_array *op_array,
}
} else if (opline->extended_value == ZEND_ASSIGN_OBJ) {
if (opline->op1_type == IS_CV) {
- if (orig & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_FALSE)) {
- orig &= (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_FALSE);
- orig |= MAY_BE_OBJECT | MAY_BE_RC1 | MAY_BE_RCN;
- }
- if (orig & MAY_BE_OBJECT) {
- orig |= (MAY_BE_RC1|MAY_BE_RCN);
+ if (!(orig & MAY_BE_REF)) {
+ if (orig & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_FALSE)) {
+ orig &= (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_FALSE);
+ orig |= MAY_BE_OBJECT | MAY_BE_RC1 | MAY_BE_RCN;
+ }
+ if (orig & MAY_BE_OBJECT) {
+ orig |= (MAY_BE_RC1|MAY_BE_RCN);
+ }
}
UPDATE_SSA_TYPE(orig, ssa_ops[i].op1_def);
COPY_SSA_OBJ_TYPE(ssa_ops[i].op1_use, ssa_ops[i].op1_def);