php / php/php-src

The Not ! operator in combination with NAN fails with OPcache enabled

Offen
#15,773 4 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bug Category: Optimizer Status: Requires RFC
Vorherrschende Sprache
C
Sterne
40.4k
Forks
8.1k
Ø Merge
2 T. 13 Std.
Gemergte PRs (30 T.)
96

Beschreibung

Description

The following code:

$a = 100.0;
$b = \NAN;

$cmp = $a > $b; // since NAN always false;
$cmp2 = !($a > $b); // $expected true;

var_dump($cmp);
var_dump($cmp2);

assert($cmp === false);
assert($cmp2 === true);

Resulted in this output:

bool(false)
bool(true)

Resulted in this output with opcache enabled:

bool(false)
bool(false) ❌

But I expected this output instead:

bool(false)
bool(true)

The issue only seems to appear using opcache. Also spotted on different environments with older PHP versions.

PHP 8.3.11 (cli) (built: Aug 30 2024 16:21:34) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.3.11, Copyright (c) Zend Technologies
    with Xdebug v3.3.1, Copyright (c) 2002-2023, by Derick Rethans
    with Zend OPcache v8.3.11, Copyright (c), by Zend Technologies

PHP Version

PHP 8.3.11

Operating System

No response

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Reproduziere das minimale PHP-Beispiel aus dem Bericht mit aktiviertem und deaktiviertem OPcache unter Verwendung von PHP 8.3.11 oder einer anderen betroffenen Version. Verfolge dann die Verarbeitung des Vergleichs und der Negation durch den OPcache-Optimierer; abgeschlossen ist die Aufgabe, wenn die Assertions erfolgreich sind und beide Ausgaben bei aktiviertem OPcache mit den erwarteten Werten übereinstimmen.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
php
Bereich
compilers
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Klar beschrieben
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.