[php-src] Issue #9175: Multiplication operand order

From: Date: Thu, 28 Jul 2022 10:07:03 +0000
Subject: [php-src] Issue #9175: Multiplication operand order
Groups: php.bugs 
Request: Send a blank email to php-bugs+get-242045@lists.php.net to get a copy of this message
Issue: https://github.com/php/php-src/issues/9175 Author: mario-deluna ### Description In reference to [#3735](https://github.com/php/php-src/pull/3735), I'm struggling with a very similar problem. I'm working on a GL math extension and have encountered a roadblock with matrix multiplication. As [@weltling](https://github.com/weltling) pointed out, the order is critical, and I can see that this commit https://github.com/php/php-src/commit/1165a9068cbf3c3c24a78b47e0effcf9b90ec5bc removed ZEND_MUL from one of the optimizer passes. I'm not 100% certain the swapping occurs in the optimizer as I ran into the swapped arguments also with the opcache turned off and opcache.optimization_level=0x00000000. The extension utilizes the do_operation handler. Here is example code to explain myself better. The problem only occurs when multiplying three or more objects in one expression. ```php <?php use GL\Math\Mat4; $m1 = new Mat4( 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ); $m2 = new Mat4( 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 ); $m3 = new Mat4( 0.16, 0.15, 0.14, 0.13, 0.12, 0.11, 0.10, 0.90, 0.80, 0.70, 0.60, 0.50, 0.40, 0.30, 0.20, 0.10 ); // works fine, correct order var_dump($m1 * $m2); // incorrect result, order of execution is: // logged: MUL(tmp_res, $m1 * $m2), MUL(returnval, $m3 * tmp_res) var_dump($m1 * $m2 * $m3); // you can workaround using parenthesis // logged: MUL(tmp_res, $m2 * $m3), MUL(returnval, $m1 * tmp_res) var_dump($m1 * ($m2 * $m3)); // but for the expected result it should not matter where parenthesis are set and the order should be fixed. ``` I've tried to look for workarounds by somehow detecting when and if they have been swapped but have had no luck yet. I gladly open a pull request if this requires some work in php-src itself, but I would kindly ask for some hints and direction on where this might happen. Kind regards Mario ### PHP Version PHP 8.1.5 ### Operating System MacOS 12.4

« previous php.bugs (#242045) next »