php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #80742 Opcache JIT makes some boolean logic unexpectedly be true
Submitted: 2021-02-13 00:47 UTC Modified: 2021-02-16 11:10 UTC
Votes:5
Avg. Score:5.0 ± 0.0
Reproduced:5 of 5 (100.0%)
Same Version:5 (100.0%)
Same OS:5 (100.0%)
From: dktapps at pmmp dot io Assigned: dmitry (profile)
Status: Closed Package: JIT
PHP Version: 8.0Git-2021-02-13 (Git) OS: Windows 10
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: dktapps at pmmp dot io
New email:
PHP Version: OS:

 

 [2021-02-13 00:47 UTC] dktapps at pmmp dot io
Description:
------------
JIT breaks some boolean logic involving `and` in ways I don't understand.

It's possible this occurs with other operators, but I stumbled on this in code in the wild so I haven't tested further.

When running the following using -dopcache.jit=0 (or without opcache), the script produces the expected result.

Using -dopcache.jit=1205 produces the broken result.

This occurs in a minimal NTS build with only PHP and OPcache using https://github.com/php/php-src/commit/6ec25f386ff058b5ecda6f11c5f62e934b31f660, so it's easily reproducible.



Test script:
---------------
<?php

function checkGroundState(float $movY, float $dy) : void{
	var_dump($movY != $dy, $movY < 0, ($movY != $dy and $movY < 0));
	var_dump("wow!");
}

checkGroundState(0, 0);

Expected result:
----------------
bool(false)
bool(false)
bool(false)
string(4) "wow!"


Actual result:
--------------
bool(false)
bool(false)
bool(true)
string(4) "wow!"


Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2021-02-16 11:10 UTC] nikic@php.net
-Status: Open +Status: Verified -Assigned To: +Assigned To: dmitry
 [2021-02-16 17:02 UTC] dmitry@php.net
Automatic comment on behalf of dmitry@zend.com
Revision: http://git.php.net/?p=php-src.git;a=commit;h=fad87a24daa8a79f7bcb9d4088f7d96d6f405cac
Log: Fixed bug #80742 (Opcache JIT makes some boolean logic unexpectedly be true)
 [2021-02-16 17:02 UTC] dmitry@php.net
-Status: Verified +Status: Closed
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Tue Nov 26 04:01:31 2024 UTC