Nikita Popov
df7417d127
Fix incorrectly optimized out live range
...
For x ? y : z style structures, the live range starts at z, but
may also hold the value of y. Make sure that the refcounting check
takes this into account, by checking the type of a potential phi
user.
2020-11-17 10:19:57 +01:00
Nikita Popov
d971b67027
Fix phi use chain management when renaming variable
...
If there is a previous use of the new variable in the phi, we need
to NULL out the use chain of the new source we're adding.
Test case is reduced from an assertion failure in the Symfony Demo.
2020-11-09 17:08:16 +01:00
Nikita Popov
83738281eb
Fix SSA integrity violation for type inference in dead code
...
The foreach body can never be executed and thus may contain empty
types. We should still uphold our SSA integrity invariants in that
case.
2020-10-30 15:52:10 +01:00
Nikita Popov
683c988493
Fixed bug #80194
...
We should strip NOPs from unreachable_free blocks as well, to make
sure that the free really is the first op.
2020-10-07 15:03:12 +02:00
Nikita Popov
9c136f10cd
Merge branch 'PHP-7.3' into PHP-7.4
...
* PHP-7.3:
Fixed bug #80083
2020-09-17 10:13:53 +02:00
Nikita Popov
a4f806aa79
Fixed bug #80083
...
Add db2_execute() to the list of functions accessing the local
scope. Ideally the API wouldn't do that, but it seems most
pragmatic to address this on the opcache side at this point.
2020-09-17 10:12:10 +02:00
Nikita Popov
8516434a56
Fixed bug #80046
...
We already protect against optimizing away loop frees in DFA pass,
but not in block pass.
2020-09-03 11:19:04 +02:00
Nikita Popov
37612936a1
Fix pi node removal when removing predecessor
...
We can't just remove the uses, we need to replace uses.
The test case only fails on master with SSA integrity violations,
but I believe the root issue also existed previously.
2020-09-01 12:25:00 +02:00
Nikita Popov
f8ff8bb767
Merge branch 'PHP-7.3' into PHP-7.4
...
* PHP-7.3:
Consider op1 literal of FETCH_OBJ_R
2020-07-29 17:05:35 +02:00
Nikita Popov
57ad5b3432
Consider op1 literal of FETCH_OBJ_R
...
FETCH_OBJ_R may have an op1 CONST operand, even though it will
always error. We should take this into account when compacting
literals.
2020-07-29 17:04:23 +02:00
Nikita Popov
fabcd9f14e
Don't inline static call to instance method
...
Fixes the failure in bug79740.phpt with opcache.
2020-06-29 09:52:37 +02:00
Nikita Popov
733d84dbdf
Merge branch 'PHP-7.3' into PHP-7.4
...
* PHP-7.3:
Fixed bug #79535
2020-05-04 14:52:18 +02:00
Nikita Popov
7c1316ec6a
Fixed bug #79535
...
We did not allocate a cache slot for FETCH_CLASS. This is already
fixed on newer PHP versions.
2020-05-04 14:51:18 +02:00
Nikita Popov
59c8d6a863
Merge branch 'PHP-7.3' into PHP-7.4
...
* PHP-7.3:
Fix literal compaction collision between string and double
2020-04-01 14:22:27 +02:00
Nikita Popov
14b770d407
Fix literal compaction collision between string and double
...
For the sake of simplicity I'm using a separate hashtable, rather
than trying to do hash perturabation on the double strings.
2020-04-01 14:20:59 +02:00
Dmitry Stogov
91ee85c20c
Merge branch 'PHP-7.3' into PHP-7.4
...
* PHP-7.3:
Fixed bug #79412 (Opcache chokes and uses 100% CPU on specific script).
2020-03-25 17:31:33 +03:00
Dmitry Stogov
65120cfc09
Fixed bug #79412 (Opcache chokes and uses 100% CPU on specific script).
2020-03-25 17:31:06 +03:00
Nikita Popov
dd9b5c8680
Merge branch 'PHP-7.3' into PHP-7.4
...
* PHP-7.3:
Handle NULL caller_call_opline
2020-03-23 17:12:12 +01:00
Nikita Popov
34f1266a9c
Handle NULL caller_call_opline
...
This can happen if there is an EXIT in the call arguments, in which
case the DO_CALL opcode may be eliminated as unreachable.
2020-03-23 17:12:01 +01:00
Dmitry Stogov
cb88184420
Merge branch 'PHP-7.3' into PHP-7.4
...
* PHP-7.3:
Fixed incorrect overflow detection
2020-02-27 23:38:09 +03:00
Dmitry Stogov
5b51b633e2
Fixed incorrect overflow detection
2020-02-27 23:37:41 +03:00
Nikita Popov
f70b552326
Fixed bug #79193
2020-01-30 14:55:58 +01:00
Dmitry Stogov
6ef7e53c1b
Fixed bug #78961 (erroneous optimization of re-assigned $GLOBALS)
2019-12-16 12:24:47 +03:00
Nikita Popov
2d03b638dc
Fix handling of non-final loop var free in sccp
...
We only need to preserve the FE_FREE that marks the end of the
loop range. Skip FE_FREEs with the FREE_ON_RETURN flag.
2019-12-12 09:39:52 +01:00
Nikita Popov
4313659bb9
Fix merge mistake
2019-12-10 09:03:44 +01:00
Nikita Popov
7e028a41e2
Merge branch 'PHP-7.3' into PHP-7.4
...
* PHP-7.3:
Fix DCE with FE_FETCH
2019-12-10 09:01:18 +01:00
Nikita Popov
87691e74e5
Fix DCE with FE_FETCH
...
For now, don't treat FE_FETCH op2 as no-val use. See GH-4982.
2019-12-10 09:00:09 +01:00
Nikita Popov
39b08ba99c
Merge branch 'PHP-7.3' into PHP-7.4
...
* PHP-7.3:
Fix print_r return types in opcache
2019-12-04 07:16:56 +01:00
Tyson Andre
c8e9aa854c
Fix print_r return types in opcache
...
https://www.php.net/print_r
> When the return parameter is TRUE, this function will return a string.
> Otherwise, the return value is TRUE.
2019-12-04 07:16:32 +01:00
Dmitry Stogov
49fcbb4810
Merge branch 'PHP-7.3' into PHP-7.4
...
* PHP-7.3:
Fixed wrong constant usage
2019-11-12 13:00:27 +03:00
Dmitry Stogov
9083e178f6
Fixed wrong constant usage
2019-11-12 12:59:50 +03:00
Nikita Popov
4d8541debb
Merge branch 'PHP-7.3' into PHP-7.4
...
* PHP-7.3:
Fixed bug #78747
2019-10-25 12:50:26 +02:00
Nikita Popov
74699533e5
Merge branch 'PHP-7.2' into PHP-7.3
...
* PHP-7.2:
Fixed bug #78747
2019-10-25 12:50:12 +02:00
Nikita Popov
5249993814
Fixed bug #78747
2019-10-25 12:47:18 +02:00
Nikita Popov
6aece7be0a
Optimize VERIFY_RETURN_TYPE for TMP operands as well
...
Only exclude CONST operands, which use a different instruction
format (they have a return operand).
2019-10-25 11:37:19 +02:00
Nikita Popov
f07565b0eb
Check class linking in VERIFY_RETURN_TYPE optimization
...
instanceof_function() requires linked classes. I'm not reusing
unlinked_instanceof() here, because it performs class loading,
which wouldn't be right here, I think.
2019-10-25 11:24:32 +02:00
Nikita Popov
a6c9c7c2b8
Handle resources used as array keys consistently
...
Resources used as array keys are generally handled by throwing a
notice and converting the resource to the resource handle. The only
exception is the [$resource => null] syntax, where this was treated
as an illegal offset type instead. However, this also only happened
for VM evaluations, the AST evaluator did handle resources correctly.
2019-09-27 10:40:41 +02:00
Nikita Popov
5bee9c9062
Merge branch 'PHP-7.3' into PHP-7.4
2019-09-19 17:22:28 +02:00
Nikita Popov
85e7668129
Merge branch 'PHP-7.2' into PHP-7.3
2019-09-19 17:21:45 +02:00
Nikita Popov
003c13d7bc
Fix iterable return type optimization
2019-09-19 17:21:00 +02:00
Nikita Popov
62b440ffbb
Merge branch 'PHP-7.3' into PHP-7.4
2019-09-17 12:09:06 +02:00
Nikita Popov
f98684b06c
Merge branch 'PHP-7.2' into PHP-7.3
2019-09-17 12:08:57 +02:00
Tyson Andre
29bced9521
Fix opcache return type for get_headers in zend_func_info
...
https://www.php.net/manual/en/function.get-headers.php#refsect1-function.get-headers-examples
shows that it will return string keys when the second argument is
non-zero. I've verified that this is the case.
This bug was there since the initial commit in c88ffa9a56 .
Closes GH-4702.
2019-09-17 12:08:29 +02:00
Dmitry Stogov
af9b127fed
Make constant and copy propagation only for IS_TMP_VAR operands
2019-09-13 12:38:57 +03:00
Tyson Andre
3e89e9a636
Add opcache return type for random_int()
...
random_int() will throw for incorrect argument counts, types (e.g. float
that can't cast to int), or having min > max.
See ext/standard/random.c
2019-09-09 17:19:04 +02:00
Tyson Andre
45e529d673
Fix opcache zend_func_info for microtime/gettimeofday
...
microtime() doesn't return an array,
and gettimeofday() doesn't return a string.
See _php_gettimeofday in microtime.c (mode is non-zero for gettimeofday)
2019-09-09 17:13:19 +02:00
Tyson Andre
94e2f25f07
Add missing opcache return types for functions in spl
...
(excluding spl_autoload)
spl_object_id() is of the most interest to me,
since I frequently call it in an application.
This includes false/null types caused by wrong argument types and wrong argument
counts.
I can't rule out iterator_to_array returning null in spl_iterator_apply,
so leave MAY_BE_NULL in.
With review comments by nikic:
Co-Authored-By: Nikita Popov <nikita.ppv@googlemail.com >
2019-09-04 11:12:41 +02:00
Tyson Andre
4de8503c22
Add missing opcache return info for ext/standard.
...
array_key_first/last returns null for invalid args,
wrong argument counts, and empty arrays.
random_bytes returns a string or throws.
2019-09-03 09:57:51 +02:00
Tyson Andre
1a905bcb1e
Add new missing functions from ext/hash
2019-09-03 09:53:41 +02:00
Nikita Popov
632708ac02
Merge branch 'PHP-7.3' into PHP-7.4
2019-09-03 09:24:05 +02:00