On 03/14/2016 02:29 PM, Nikita Popov wrote:
On Mon, Mar 14, 2016 at 11:56 AM, Dmitry Stogov <dmi...@zend.com <mailto:dmi...@zend.com>> wrote:

    Please take a quick look and let me know if you see any problems.


    https://gist.github.com/dstogov/23cc318dd3e411904e10


    I'm going to commit this tomorrow.


    Thanks. Dmitry.

ZEND_ADD is not commutative for array operands.

Unfortunately, you are right :(
ZEND_MUL may not be commutative if operator overloading is involved (e.g. matrix multiplication is not abelian).

Right again.

The NO_CONST_CONST cases are problematic: Opcache currently, in my eyes incorrectly, evaluates constant expressions even if they throw notices (currently I think mostly by suppressing them). If we do not evaluate these, we may end up with CONST_CONST operations. (This is not a huge problem just now because constant folding in opcache is limited -- however with full constant propagation this leads to many test failures.)

The patch adds NO_CONST_CONST handling to opcache. All tests are passed, I also didn't see any problems running ~10 real-life apps.

The opcodes affected by the last point (limited to those included in your patch) are SUB, MUL, POW, CONCAT (array operands) and BW_NOT (various). However with Andrea's invalid numeric string RFC more will fall in this category (evaluable but throwing).

I didn't get what is wrong with SUB, MUL, etc, because they are evaluated at compile-time
Anyway, I see - the patch can't be committed in current state.
Thanks for review.

Dmitry.


Nikita

Reply via email to