1
0
mirror of https://github.com/php/php-src.git synced 2026-04-17 21:11:02 +02:00
Commit Graph

3031 Commits

Author SHA1 Message Date
Tyson Andre
9f8f84adbc Evaluate str_starts_with and str_ends_with on constants
When both arguments are strings,
this is guaranteed not to emit notices.

Closes GH-5539
2020-05-07 16:24:03 +02:00
Dmitry Stogov
98acdbff18 Prevent taking side traces for exceptional cases. Always exit to VM interpreter. 2020-05-07 12:49:01 +03:00
Dmitry Stogov
7977cd1c19 Fixed comment 2020-05-07 09:05:33 +03:00
Dmitry Stogov
9d869f24d4 Avoid Program Counter guard in side trace started from Fake Init Fcall guard. 2020-05-06 23:16:45 +03:00
Dmitry Stogov
b63eff17ff Initial support for IS_INDIRECT. Avoid type guards for IS_INDIRECT. 2020-05-06 22:27:38 +03:00
Dmitry Stogov
776b1aefc8 Careful cleanup 2020-05-06 16:26:36 +03:00
Nikita Popov
5bc1e224db Make numeric operations on resources, arrays and objects type errors
RFC: https://wiki.php.net/rfc/arithmetic_operator_type_checks

Closes GH-5331.
2020-05-05 16:11:13 +02:00
Nikita Popov
4c24545aab Merge branch 'PHP-7.4'
* PHP-7.4:
  Fixed bug #79548
2020-05-04 16:30:34 +02:00
Nikita Popov
21a9ad910b Fixed bug #79548
When duplicating user functions with static variables, make sure
that we init a new map ptr slot for the static variables.
2020-05-04 16:27:45 +02:00
Nikita Popov
f55b413d60 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fixed bug #79535
2020-05-04 14:52:42 +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
Tyson Andre
d63eca285a Fix miscellaneous typos in code comments/var names
Closes GH-5501
2020-05-01 15:49:05 +02:00
Tyson Andre
54febdbc7d Fix other typos in param name/code comments
Closes GH-5502
2020-05-01 12:23:16 +02:00
Dmitry Stogov
968c31a43c Better handling of IS_UNDEF variables 2020-04-30 17:07:35 +03:00
Dmitry Stogov
3c04ce43ed Replace ZEND_ASSERT() by conditional compilation abort.
Prevent endless loop through ESCAPE code.
2020-04-30 15:32:01 +03:00
Nikita Popov
53eee290b6 Completely remove disabled functions from function table
Currently, disabling a function only replaces the internal
function handler with one that throws a warning, and a few
places in the engine special-case such functions, such as
function_exists. This leaves us with a Schrödinger's function,
which both does not exist (function_exists returns false) and
does exist (you cannot define a function with the same name).
In particular, this prevents the implementation of robust
polyfills, as reported in https://bugs.php.net/bug.php?id=79382:

    if (!function_exists('getallheaders')) {
        function getallheaders(...) { ... }
    }

If getallheaders() is a disabled function, this code will break.

This patch changes disable_functions to remove the functions from
the function table completely. For all intents and purposes, it
will look like the function does not exist.

This also renders two bits of PHP functionality obsolete and thus
deprecated:

 * ReflectionFunction::isDisabled(), as it will no longer be
   possible to construct the ReflectionFunction of a disabled
   function in the first place.
 * get_defined_functions() with $exclude_disabled=false, as
   get_defined_functions() now never returns disabled functions.

Fixed bug #79382.

Closes GH-5473.
2020-04-30 09:53:57 +02:00
Dmitry Stogov
65934d31d1 Improved tracing JIT for nested calls 2020-04-29 18:24:18 +03:00
Dmitry Stogov
faa57abe71 white space fixes 2020-04-29 13:29:01 +03:00
Nikita Popov
17d763ff47 JIT: Save opline before calling zend_timeout
tests/045.phpt started segfaulting, because the opline is not set
when zend_timeout is invoked.
2020-04-29 10:58:39 +02:00
Nikita Popov
88a701aa02 Less conservative fix
I think it's reasonable to assume that the only possible types
are those that are declared, and null, because null is what
return_value is initialized to.
2020-04-28 15:55:02 +02:00
Nikita Popov
0da38cda6e Fix JIT segfaults in FFI tests
Conservative fix that just disables this optimization.
2020-04-28 15:43:52 +02:00
Dmitry Stogov
790a08c885 Improve JIT code for FCALL with "fake" INIT and avoid fcall_guard if possible. 2020-04-28 13:05:56 +03:00
Nikita Popov
f38d6cea42 Check func_info consistency
Make sure explicitly specified func_info is a subset of
automatically computed info. This will at least prevent
cases where a type is removed from stubs, but not removed
from func_info.

Closes GH-5471.
2020-04-27 16:25:59 +02:00
Nikita Popov
c5f87eee5d Mark passthru() as RC0
This function only returns null/false, RC1 does not make sense.
2020-04-27 15:39:31 +02:00
Nikita Popov
58eafbe734 Make array_rand() type info more accurate 2020-04-27 15:36:32 +02:00
Nikita Popov
cc8a8613b6 Remove MAY_BE_FALSE from range() type info 2020-04-27 15:36:32 +02:00
Máté Kocsis
a6960cfb05 Fix inaccurate func infos
Closes GH-5472
2020-04-27 15:35:44 +02:00
Nikita Popov
19e886d9d8 Avoid throw expression leaks
Mark "throw" used in expression context with a flag, and don't
treat it as a BB terminator in that case. This prevents us from
optimizing away the following opcodes as unreachable, which may
result in live ranges being dropped incorrectly.

Close GH-5450.
2020-04-27 15:22:05 +02:00
Dmitry Stogov
29fc6846d8 Fixed incorrect side exit address 2020-04-27 15:59:37 +03:00
Nikita Popov
a447897db0 Use information about classes returned by internal functions 2020-04-27 12:50:24 +02:00
Nikita Popov
41c7d28c11 Add macro to get ini target address 2020-04-27 10:30:00 +02:00
Dmitry Stogov
6ab2e82ab5 Avoid STORE of register inherited from parent trace 2020-04-24 16:32:31 +03:00
Dmitry Stogov
8a04d39d1c Skip life range with LOAD and single use 2020-04-24 16:14:58 +03:00
Dmitry Stogov
9ddf9ac98e cleanup 2020-04-24 16:14:44 +03:00
Dmitry Stogov
dc379e1c45 Abort register allocation if no candidates 2020-04-24 14:24:52 +03:00
Dmitry Stogov
13df3fcb0a More accurate life range termination 2020-04-23 11:49:28 +03:00
Dmitry Stogov
11c698f1f3 Reorder conditions 2020-04-22 15:56:54 +03:00
Dmitry Stogov
572b799b52 Fixed register allocation constraints 2020-04-22 13:49:54 +03:00
Dmitry Stogov
94fba02621 Reuse registers allocated for parent trace in side traces 2020-04-21 17:34:31 +03:00
Dmitry Stogov
333a28ed58 Register allocation is useless if JIT just calls standarad VM handlers 2020-04-21 14:56:56 +03:00
Dmitry Stogov
832cfa15eb Removed old TODO 2020-04-21 12:07:36 +03:00
Christoph M. Becker
321d9d9ae3 Fix OPcache build
`||` at the beginning of a line has special meaning for the DynAsm
preprocessor.
2020-04-20 17:40:16 +02:00
Dmitry Stogov
b0b43e86ae Register allocator and deoptimizer for tracing JIT. 2020-04-20 16:02:03 +03:00
Tyson Andre
4e1219ac88 [skip ci] Fix typos in jit code comments
And in Opcache's zend_cfg.h

Closes GH-5414
2020-04-19 10:03:49 -04:00
Christoph M. Becker
a1eaaa692e Fix #79475: [JIT] func_get_args() assertion violation
`func_get_args()` may return `zend_empty_array`, which has refcount 2
to enforce separation.   We have to cater to that during type inference
so that the optimization in the JIT macro `SEPARATE_ARRAY` doesn't
prevent the separation.
2020-04-17 09:53:23 +02:00
Dmitry Stogov
ea0110f0de Improve registers reuse 2020-04-16 14:35:51 +03:00
Nikita Popov
00013401ff Allow using prototypes when optimizing arg passing
Closes GH-5193.
2020-04-16 12:15:19 +02:00
Nikita Popov
dd163d05ff Remove OP_RANGE_EX distinction
Only leave OP_RANGE macros, which always have the "EX" behavior.

This was already done for most other macros before, but these
were missed. This helps avoid mistakes by using the wrong macro.
2020-04-15 13:00:36 +02:00
Dmitry Stogov
99084262c3 Use proper macro 2020-04-15 13:09:55 +03:00