Category
bug · php-src-strict · pillar 4 (correctness)
Problem
$a = @$undef; still emits E_WARNING: Undefined variable $undef on VM/JIT. Zend silences the warning (stderr empty). Bare @$undef; and @$arr['missing'] already match Zend on VM — the gap is specifically error-control applied to an undefined variable used as the RHS of assignment.
Verified 2026-08-08 vs Zend 8.2.32 (bin/vm.php + bin/jit.php).
| Repro |
Zend |
VM / JIT |
$a = @$undef; |
no warning; ok |
PHP Warning: Undefined variable $undef + ok |
@$undef; (bare) |
silent |
silent (OK) |
$a = @$b['x']; |
silent |
silent (OK) |
php-src reference
PHP implementation target
Repro
./script/docker-exec.sh -- bash -lc 'cat > /tmp/at_rhs.php <<'"'"'PHP'"'"'
<?php
error_reporting(E_ALL);
$a = @$undef;
echo \"ok\n\";
PHP
php /tmp/at_rhs.php; echo ---; php bin/vm.php /tmp/at_rhs.php; echo ---; php bin/jit.php /tmp/at_rhs.php'
Done when
Related
Category
bug· php-src-strict · pillar 4 (correctness)Problem
$a = @$undef;still emitsE_WARNING: Undefined variable $undefon VM/JIT. Zend silences the warning (stderr empty). Bare@$undef;and@$arr['missing']already match Zend on VM — the gap is specifically error-control applied to an undefined variable used as the RHS of assignment.Verified 2026-08-08 vs Zend 8.2.32 (
bin/vm.php+bin/jit.php).$a = @$undef;okPHP Warning: Undefined variable $undef+ok@$undef;(bare)$a = @$b['x'];php-src reference
Zend/zend_compile.c—ZEND_SILENCE/ compile of@Zend/zend_execute.c—ZEND_BEGIN_SILENCE/ZEND_END_SILENCEaround CV fetchPHP implementation target
ErrorSuppressBlock/ silence frame covers CV fetch when@wraps the RHS of=(assign opcode + silenced fetch)lib/lowering + VM silence; JIT must match (re-Language: @ error-control operator — JIT/AOT native silence (phase 2 of #3546) #4070 covered broader JIT silence — this is a remaining VM/JIT assign+CV hole)Repro
Done when
ok@$undef;and other already-green@forms unchanged.phptundertest/compliance/cases/language/Related
@silence phase 2) — does not cover this assign+undefined CV caseerror_get_lastafter bare@read) — different surface