php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #81512 Unexpected behavior with arrays and JIT
Submitted: 2021-10-07 13:55 UTC Modified: 2021-10-25 17:15 UTC
Votes:1
Avg. Score:3.0 ± 0.0
Reproduced:0 of 0 (0.0%)
From: timuradilev at gmail dot com Assigned: dmitry (profile)
Status: Closed Package: JIT
PHP Version: 8.0.11 OS: Ubuntu 20.04.3
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: timuradilev at gmail dot com
New email:
PHP Version: OS:

 

 [2021-10-07 13:55 UTC] timuradilev at gmail dot com
Description:
------------
We migrated from php 7.4 to 8 and encountered an issue.
In mongodb/mongo-php-library there is the function 'is_pipeline' that checks that the given argument is the correct pipeline. This function started to return false for correct pipelines.

I reduced the function. See the test script section.
To reproduce the behavior run the test script with opcache.enable_cli=1 and opcache.jit=tracing.

Optimization flags 0052 also trigger the issue.
We think it may be due to the "Inline VM handlers" option.

Test script:
---------------
$pipe = [['val1'],['val2'],];

for ($i = 0; $i < 30; ++$i) {
	echo "$i ";
	if (!is_pipeline($pipe)) {
		echo 'ERROR ';
	}
}

function is_pipeline($pipeline): bool {
	foreach ($pipeline as $stage) {
		if (!is_array($stage)) {
			return false; // must never happen
		}

		$stage = (array) $stage;
		reset($stage);
	}

	return true;
}

Expected result:
----------------
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29

Actual result:
--------------
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ERROR 22 ERROR 23 ERROR 24 ERROR 25 ERROR 26 ERROR 27 ERROR 28 ERROR 29 ERROR

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2021-10-07 14:10 UTC] nikic@php.net
I can reproduced on 8.0 but not on 8.1.
 [2021-10-07 14:10 UTC] nikic@php.net
-Status: Open +Status: Assigned -Assigned To: +Assigned To: dmitry
 [2021-10-07 18:29 UTC] git@php.net
Automatic comment on behalf of dstogov
Revision: https://github.com/php/php-src/commit/b47a48ff80fdade1f7f44b906da27ea18061464b
Log: Fixed bug #81512 (Unexpected behavior with arrays and JIT)
 [2021-10-07 18:29 UTC] git@php.net
-Status: Assigned +Status: Closed
 [2021-10-25 16:41 UTC] s dot pankratoff at gmail dot com
Hello! 

I can't see this fix in 8.0.12 update. Is there any plans to include it in 8.0 branch or it will be only in 8.1?

Thanks!
 [2021-10-25 17:15 UTC] dmitry@php.net
The fix is not included into 8.0.12, but it's committed into PHP-8.0 branch, and should appear in 8.0.13.
 
PHP Copyright © 2001-2025 The PHP Group
All rights reserved.
Last updated: Sat Mar 15 18:01:28 2025 UTC