-
Notifications
You must be signed in to change notification settings - Fork 7.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Assertion failure ext/opcache/jit/zend_jit_ir.c:8940 #17428
Comments
devnexen
added
Category: JIT
Extension: opcache
Status: Verified
and removed
Status: Needs Triage
labels
Jan 10, 2025
nielsdos
added a commit
to nielsdos/php-src
that referenced
this issue
Jan 10, 2025
The code to update the call_level in that case skips the opline itself, as that's handled by the tail handler, and then wants to set the opline to the last opline of the block because the code below the switch will update the call_level for that opline. However, the test has a block with a single THROW, so the opline is not correctly updated to the end opline of the block.
nielsdos
added a commit
to nielsdos/php-src
that referenced
this issue
Jan 10, 2025
The code to update the call_level in that case skips the opline itself, as that's handled by the tail handler, and then wants to set the opline to the last opline of the block because the code below the switch will update the call_level for that opline. However, the test has a block with a single opline (THROW). The block after that has ZEND_INIT_FCALL, because `i` points to ZEND_INIT_FCALL now, it erroneously causes the call_level after the switch. Although it suffices to change `i` to `end` (none of the opcodes here occur in `zend_jit_dec_call_level`), I added a goto label as well to be safer for the future in case the list of opcodes changes.
nielsdos
added a commit
to nielsdos/php-src
that referenced
this issue
Jan 10, 2025
The code to update the call_level in that case skips the opline itself, as that's handled by the tail handler, and then wants to set the opline to the last opline of the block because the code below the switch will update the call_level for that opline. However, the test has a block with a single opline (THROW). The block after that has ZEND_INIT_FCALL, because `i` points to ZEND_INIT_FCALL now, it erroneously causes the call_level after the switch. Although it suffices to change `i` to `end` (none of the opcodes here occur in `zend_jit_dec_call_level`), I added a goto label as well to be safer for the future in case the list of opcodes changes.
nielsdos
added a commit
to nielsdos/php-src
that referenced
this issue
Jan 10, 2025
The code to update the call_level in that case skips the opline itself, as that's handled by the tail handler, and then wants to set the opline to the last opline of the block because the code below the switch will update the call_level for that opline. However, the test has a block with a single opline (THROW). The block after that has ZEND_INIT_FCALL, because `i` points to ZEND_INIT_FCALL now, it erroneously causes the call_level after the switch. Although it suffices to change `i` to `end` (none of the opcodes here occur in `zend_jit_dec_call_level`), I added a goto label as well to be safer for the future in case the list of opcodes changes.
nielsdos
added a commit
that referenced
this issue
Jan 14, 2025
* PHP-8.4: Fix GH-17428: Assertion failure ext/opcache/jit/zend_jit_ir.c:8940
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Description
The following code:
Resulted in this output:
To reproduce:
PHP Version
nightly
Operating System
No response
The text was updated successfully, but these errors were encountered: