From: Dmitry Stogov Date: Wed, 3 Apr 2019 08:22:59 +0000 (+0300) Subject: Fixed SCCP support for ZEND_ASSIGN_OBJ_REF X-Git-Tag: php-7.4.0alpha1~606 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c941f1d8c7a1418d65d01803b421dfe746eb69a0;p=php Fixed SCCP support for ZEND_ASSIGN_OBJ_REF --- diff --git a/ext/opcache/Optimizer/sccp.c b/ext/opcache/Optimizer/sccp.c index 3cbaa87b4c..9358afdf0c 100644 --- a/ext/opcache/Optimizer/sccp.c +++ b/ext/opcache/Optimizer/sccp.c @@ -1803,6 +1803,16 @@ static void sccp_visit_instr(scdf_ctx *scdf, zend_op *opline, zend_ssa_op *ssa_o SET_RESULT_BOT(result); break; } + case ZEND_ASSIGN_STATIC_PROP_REF: + case ZEND_ASSIGN_OBJ_REF: + SET_RESULT_BOT(result); + SET_RESULT_BOT(op1); + SET_RESULT_BOT(op2); + opline++; + ssa_op++; + op1 = get_op1_value(ctx, opline, ssa_op); + SET_RESULT_BOT(op1); + break; default: { /* If we have no explicit implementation return BOT */ diff --git a/ext/opcache/tests/opt/sccp_027.phpt b/ext/opcache/tests/opt/sccp_027.phpt new file mode 100644 index 0000000000..38189592b0 --- /dev/null +++ b/ext/opcache/tests/opt/sccp_027.phpt @@ -0,0 +1,27 @@ +--TEST-- +SCCP 027: Support for ASSIGN_OBJ_REF +--INI-- +opcache.enable=1 +opcache.enable_cli=1 +opcache.optimization_level=-1 +opcache.preload= +--SKIPIF-- + +--FILE-- +arr =& $a; + if (isset($a[0])) { + return 1; + } else { + return 2; + } + } +} +$x = new Foo(); +var_dump($x->init([1])); +?> +--EXPECT-- +int(1)