Dmitry Stogov
eb43f8a4f8
Eliminate more VERIFY_RETURN_TYPE instructions
2021-12-27 23:40:21 +03:00
Dmitry Stogov
a066b809de
Skip abstract methods
2021-12-27 15:28:46 +03:00
Dmitry Stogov
2759e6bc69
Fixed assertion when check "instanceof" on unlinked class
2021-12-27 12:02:13 +03:00
Nikita Popov
e45653c089
Make sure SCCP can evaluate all functions pass1 can
...
Move evaluation of ini_get() into eval_special_func_call() and
use this helper both in pass1 and sccp.
2021-12-26 15:40:35 +01:00
Nikita Popov
1050edaef8
Extract special function evaluation from pass1
...
Pass1 handles a number of special functions that can be evaluated
under some circumstances. Move the core logic into a separate
helper, as I believe that SCCP should reuse this.
2021-12-26 15:40:35 +01:00
Nikita Popov
c4334fc616
Remove special chr/count handling in sccp function evaluation
...
These can be handled by the generic code. Worth noting that count
will usually go through ZEND_COUNT, and chr on constants is
evaluated in the compiler, so these are not particularly compile-time
sensitive either.
2021-12-26 09:55:18 +01:00
Nikita Popov
924e875651
Minor code cleanup in pass1
...
Move literal destruction into helper and use a common result
variable to make code more compact.
2021-12-26 09:48:06 +01:00
Nikita Popov
206d80e11a
Reuse get_class_entry_from_op1() helper
...
Export and reuse this helper in places that fetch a class entry
from op1.
2021-12-25 22:18:50 +01:00
Nikita Popov
2cf93032ee
Sink op_array scope case into get_class_entry()
...
This handles references to the current class through its name
rather than self (and for cases where is is not linked yet and
thus not covered by the context lookup). Rather than handling this
only for FETCH_CLASS_CONSTANT optimization, integrate this into
the generic get_class_entry() utility.
2021-12-25 21:51:29 +01:00
Nikita Popov
046096f265
Remove outdated FETCH_CLASS handling in FETCH_CLASS_CONSTANT optimization
...
Nowadays self::X is represented using an UNUSED operand with
FETCH_CLASS_SELF flag rather than a separate FETCH_CLASS instruction.
The code already handles the new pattern.
2021-12-25 21:00:07 +01:00
Nikita Popov
f6dce4a8ca
Extract common replacement login in pass1
...
The replace const or replace with QM_ASSIGN pattern is common to
all constant folding, extract it into a function.
2021-12-25 20:56:25 +01:00
Nikita Popov
52676f2b7e
Remove unnecessary wrapper function
...
This seems to date back to a time where zval_ptr_dtor was a macro
implicitly passing additional parameters.
2021-12-25 17:39:05 +01:00
Nikita Popov
0884048401
Don't exclude arrays from constant collection
...
These are supported as constants nowadays, so we can drop the
string check.
Also fix a potential leak, though I believe this doesn't matter in
current usage, as it will effectively be suppressed during persist.
2021-12-25 17:32:18 +01:00
Nikita Popov
7eae7e5e54
Remove FETCH_CLASS+INSTANCEOF special case
...
Instead propagate the FETCH_CLASS return value, so it can be
directly replaced if possible, which will also eliminate the
FETCH_CLASS subsequently.
2021-12-25 16:45:38 +01:00
Nikita Popov
92e7cf5962
Move FETCH_CLASS+INSTANCEOF special case out of update_op1_const()
...
The generic code was rejecting this to go into a special code path
in SCCP. We should directly do that in SCCP instead, to still allow
the generic (and valid) replacement.
2021-12-25 16:32:02 +01:00
Nikita Popov
98dfde2c14
Remove unnecessary INSTANCEOF special case in sccp
...
While we can't replace the instanceof operand, we will evaluate
the instanceof to false and replace its result anyway. Even in
cases where the instanceof user cannot be replaced, we already
have generic code to convert the opcode to QM_ASSIGN in that
case.
2021-12-25 13:02:10 +01:00
Nikita Popov
36dafade51
Remove unnecessary try_replace_op1() special cases
...
update_op1_const() can handle these nowadays.
2021-12-25 12:39:52 +01:00
Nikita Popov
4ad9dbbac9
Don't replace SEND opcodes with different by-ref behavior
...
update_op1_const() implements the right logic here -- these cannot
be replaced by different opcodes, as the by-ref passing behavior
is not the same.
2021-12-25 12:34:02 +01:00
Nikita Popov
46d1e503dd
Remove redundant code in zend_optimizer_replace_by_const()
...
zend_optimizer_update_op1_const() already handles these cases.
2021-12-25 12:18:12 +01:00
Dmitry Stogov
8b23538034
Merge branch 'PHP-8.1'
...
* PHP-8.1:
Fix memory leak in SCCP
2021-12-24 13:11:09 +03:00
Dmitry Stogov
b2939b636d
Merge branch 'PHP-8.0' into PHP-8.1
...
* PHP-8.0:
Fix memory leak in SCCP
2021-12-24 13:10:58 +03:00
Tyson Andre
32e2d97a26
Allow internal functions to declare if they support compile-time evaluation, add functions. ( #7780 )
...
https://wiki.php.net/rfc/strtolower-ascii means that these functions no longer
depend on the current locale in php 8.2. Before that, this was unsafe to
evaluate at compile time.
Followup to GH-7506
Add strcmp/strcasecmp/strtolower/strtoupper functions
Add bin2hex/hex2bin and related functions
Update test of garbage collection using strtolower to use something else to create a refcounted string
2021-12-20 09:27:06 -05:00
Dmitry Stogov
e4cf3f7420
Merge branch 'PHP-8.1'
...
* PHP-8.1:
Fix incorrect optimization of ASSIGN_OP that may lead to memory leak
2021-12-20 15:17:45 +03:00
Dmitry Stogov
ca3f7b0a73
Merge branch 'PHP-8.0' into PHP-8.1
...
* PHP-8.0:
Fix incorrect optimization of ASSIGN_OP that may lead to memory leak
2021-12-20 15:17:30 +03:00
Dmitry Stogov
6b60dc29de
Merge branch 'PHP-8.1'
...
* PHP-8.1:
Fix type inference for INIT_ARRAY with invalid index
2021-12-20 11:46:45 +03:00
Dmitry Stogov
c8d10a8243
Merge branch 'PHP-8.0' into PHP-8.1
...
* PHP-8.0:
Fix type inference for INIT_ARRAY with invalid index
2021-12-20 11:46:36 +03:00
Dmitry Stogov
2337c0516a
Merge branch 'PHP-8.1'
...
* PHP-8.1:
Fix incorrect optimization that leads to memory leak
2021-12-13 13:25:47 +03:00
Dmitry Stogov
f8f0a650a7
Merge branch 'PHP-8.0' into PHP-8.1
...
* PHP-8.0:
Fix incorrect optimization that leads to memory leak
2021-12-13 13:09:05 +03:00
Christoph M. Becker
fe2c13cda4
Merge branch 'PHP-8.1'
...
* PHP-8.1:
Fix GH-7759: Incorrect return types for hash() and hash_hmac()
2021-12-12 15:47:39 +01:00
Christoph M. Becker
a708db9c8a
Merge branch 'PHP-8.0' into PHP-8.1
...
* PHP-8.0:
Fix GH-7759: Incorrect return types for hash() and hash_hmac()
2021-12-12 15:47:19 +01:00
Dmitry Stogov
bdcef24f4b
Merge branch 'PHP-8.1'
...
* PHP-8.1:
Remove range inference for booleans.
2021-12-10 14:44:21 +03:00
Dmitry Stogov
cfcee97ad6
Merge branch 'PHP-8.0' into PHP-8.1
...
* PHP-8.0:
Remove range inference for booleans.
2021-12-10 14:33:36 +03:00
Dmitry Stogov
abcf68387d
Merge branch 'PHP-8.1'
...
* PHP-8.1:
Fix incorrect JMP optimization
2021-12-10 01:45:03 +03:00
Dmitry Stogov
363434bab2
Merge branch 'PHP-8.0' into PHP-8.1
...
* PHP-8.0:
Fix incorrect JMP optimization
2021-12-10 01:44:55 +03:00
Nikita Popov
09e991f39f
Merge branch 'PHP-8.1'
...
* PHP-8.1:
Don't convert assign op operand types in opcache
2021-12-06 21:57:29 +01:00
Nikita Popov
cf377eefa6
Don't convert assign op operand types in opcache
...
This is the same change as 56b18d478e
but for ASSIGN_OP. Changing the operand type may change the error
message and can result in different behavior with operator overloading.
As with the other patch, if there is strong interest this could be
added to the DFA pass instead, with an appropriate type check.
2021-12-06 21:56:04 +01:00
Dmitry Stogov
8a5c604c3e
Merge branch 'PHP-8.1'
...
* PHP-8.1:
Fixed incorrect DCE of a constructor call
2021-12-06 16:00:39 +03:00
Dmitry Stogov
572c09d373
Merge branch 'PHP-8.0' into PHP-8.1
...
* PHP-8.0:
Fixed incorrect DCE of a constructor call
2021-12-06 16:00:30 +03:00
Dmitry Stogov
ebb7b173b0
Merge branch 'PHP-8.1'
...
* PHP-8.1:
Fix refcount inferemce ($a += $a returns old array with RCN)
2021-12-06 11:32:02 +03:00
Dmitry Stogov
4ed10f3d47
Merge branch 'PHP-8.0' into PHP-8.1
...
* PHP-8.0:
Fix refcount inferemce ($a += $a returns old array with RCN)
2021-12-06 11:31:51 +03:00
Dmitry Stogov
923bd51599
Merge branch 'PHP-8.1'
...
* PHP-8.1:
Fix SCDF cleanup of unused basic block, kept only because of FREE of a loop var
2021-12-01 18:04:47 +03:00
Dmitry Stogov
c3766c08f4
Fix SCDF cleanup of unused basic block, kept only because of FREE of a loop var
...
Fixes oss-fuzz #41516
2021-12-01 18:03:08 +03:00
Dmitry Stogov
c2aea6e805
Merge branch 'PHP-8.1'
...
* PHP-8.1:
JIT: Fix incorrect reference counting inference
2021-11-30 13:00:13 +03:00
Dmitry Stogov
3564001502
Merge branch 'PHP-8.0' into PHP-8.1
...
* PHP-8.0:
JIT: Fix incorrect reference counting inference
2021-11-30 13:00:04 +03:00
Dmitry Stogov
e1baef1835
Merge branch 'PHP-8.1'
...
* PHP-8.1:
Fixed type inference (it's safe to ignore reference counting narrowing)
2021-11-29 23:40:49 +03:00
Dmitry Stogov
2d3ea98624
Merge branch 'PHP-8.0' into PHP-8.1
...
* PHP-8.0:
Fixed type inference (it's safe to ignore reference counting narrowing)
2021-11-29 23:39:37 +03:00
Dmitry Stogov
8cdead1568
Merge branch 'PHP-8.1'
...
* PHP-8.1:
JIT: Fix exception handling when next array element is already occupied
2021-11-29 21:57:38 +03:00
Dmitry Stogov
23c5a6fd16
Merge branch 'PHP-8.0' into PHP-8.1
...
* PHP-8.0:
JIT: Fix exception handling when next array element is already occupied
2021-11-29 21:57:29 +03:00
Dmitry Stogov
ee38e3ac37
Merge branch 'PHP-8.1'
...
* PHP-8.1:
Disable type narrowing optimization when we contruct SSA for JIT
2021-11-29 15:54:53 +03:00
Dmitry Stogov
c6e895aec2
Merge branch 'PHP-8.0' into PHP-8.1
...
* PHP-8.0:
Disable type narrowing optimization when we contruct SSA for JIT
2021-11-29 15:53:16 +03:00