Nikita Popov
8c601edada
Merge branch 'PHP-8.0' into PHP-8.1
...
* PHP-8.0:
BIND_STATIC may throw
2021-09-13 17:25:13 +02:00
Nikita Popov
b610dce079
BIND_STATIC may throw
...
The evaluation of the initializer may throw. This could be refined
by checking whether the initializer is a constant AST. For now
just fix the miscompile.
2021-09-13 17:23:57 +02:00
Nikita Popov
133afe8591
Fix JIT call chain check without call opcode
...
The do_fcall opcode may have been optimized away if an opcode like
exit is present in the arguments. In that case the opcode scan
would go past the end of the op array.
2021-09-13 16:48:38 +02:00
Nikita Popov
9042c7aac6
Merge branch 'PHP-8.0' into PHP-8.1
...
* PHP-8.0:
Handle undef value in assign_dim jit
2021-09-13 11:10:03 +02:00
Nikita Popov
e7663785a7
Handle undef value in assign_dim jit
...
We should report the undefined variable here and convert it to
null. Passing on undef is particularly insidious here, because
a write_dimension handler may insert it into a hash table
(observed with WeakMap).
2021-09-13 11:09:00 +02:00
Nikita Popov
f86a963199
Merge branch 'PHP-8.0' into PHP-8.1
...
* PHP-8.0:
Also make sure binary op operands can't be undef
2021-09-09 15:09:02 +02:00
Nikita Popov
8c3d33a054
Also make sure binary op operands can't be undef
...
Otherwise we will end up passing undef to xyz_function etc, which
is not permitted.
2021-09-09 15:08:08 +02:00
Nikita Popov
b9a6ec2097
Merge branch 'PHP-8.0' into PHP-8.1
...
* PHP-8.0:
Check whether expected types are present for compound op jit
2021-09-09 14:33:10 +02:00
Dmitry Stogov
679bfb1522
Merge branch 'PHP-8.0' into PHP-8.1
...
* PHP-8.0:
JIT: fixed MUL+SEND optimization when MUL throws an exception
2021-09-08 17:57:21 +03:00
Dmitry Stogov
06275d940c
JIT: fixed MUL+SEND optimization when MUL throws an exception
2021-09-08 17:53:23 +03:00
Nikita Popov
4bccf36973
Merge branch 'PHP-8.0' into PHP-8.1
...
* PHP-8.0:
Save register before throwing undef var notice
2021-09-08 14:46:08 +02:00
Nikita Popov
e22fb46127
Save register before throwing undef var notice
...
Otherwise we may clobber it while throwing the undef var notice.
This makes the implementation for assign_dim_op line up with
fetch_dim.
2021-09-08 14:45:49 +02:00
Nikita Popov
8d069d266a
Merge branch 'PHP-8.0' into PHP-8.1
...
* PHP-8.0:
Fix jump after zend_jit_invalid_property_assign()
2021-09-08 12:29:05 +02:00
Nikita Popov
b0e16f0e4f
Fix jump after zend_jit_invalid_property_assign()
...
This is supposed to go to the FREE_OP_DATA, currently it crashes.
2021-09-08 12:27:54 +02:00
Dmitry Stogov
cbc925e510
Fixed bug #81409 (Incorrect JIT code for ADD with a reference to array)
2021-09-02 11:13:27 +03:00
Nikita Popov
99ddc806dc
Discard constants before preload_load()
...
We don't preload constants, so we should also not cache
constant evaluations based on them, as a different value may be
defined at runtime.
2021-08-16 15:47:18 +02:00
Nikita Popov
af50e687a8
Merge branch 'PHP-8.0'
...
* PHP-8.0:
Fixed bug #81353
2021-08-16 15:05:32 +02:00
Nikita Popov
47ccdecf00
Merge branch 'PHP-7.4' into PHP-8.0
...
* PHP-7.4:
Fixed bug #81353
2021-08-16 15:04:57 +02:00
Nikita Popov
d1e956ff31
Fixed bug #81353
...
A user-defined error handler should not be invoked for preload
warnings. We are in a partially shut-down state at that point.
2021-08-16 15:04:17 +02:00
Nikita Popov
9fe3aab7c5
Remove declares inside functions as well
2021-08-02 10:41:27 +02:00
Nikita Popov
8356da600b
Remove dynamic defs from methods as well
...
We need to remove DECLARE_FUNCTION + dynamic_defs for functions
defined in methods as well, not just for those declared in the
main script.
2021-08-02 10:29:58 +02:00
Nikita Popov
d836046ab8
Perform preloading attempt on copied class
...
It is very hard to determine in advance whether class linking will
fail due to missing dependencies in variance checks (#7314 attempts
this). This patch takes an alternative approach where we try to
perform inheritance on a copy of the class (zend_lazy_class_load)
and then restore the original class if inheritance fails. The fatal
error in that case is recorded and thrown as a warning later.
Closes GH-7319.
2021-07-30 15:09:49 +02:00
Nikita Popov
b1b0c81e39
Don't print preload warning for non-top-level classes
...
Dynamically declared classes categorically do not get linked during
preloading, even if all their dependencies are known. The warning
is misleading in this case, and there isn't anything the user can
do to address it.
2021-07-30 10:27:51 +02:00
Nikita Popov
8834cf013b
Handle missing class when evaluating CONST_ENUM_INIT
...
When resolving constants on a dynamically declared class during
preloading, the enum class may not be available. Fail gracefully
in that case.
Possibly we shouldn't be trying to evaluate constants on
non-linked classes at all?
2021-07-27 14:36:38 +02:00
Nikita Popov
8675380b67
Increment refcounts in mutable data copies
...
For mutable_data on preloaded classes, there may be refcounted
values in the constants/properties table.
2021-07-27 12:29:46 +02:00
Nikita Popov
1bd6fafa2f
Fix preloading of trait property attributes
2021-07-27 12:07:22 +02:00
Nikita Popov
b35418402f
Allocate map_ptr for mutable_data during preloading
...
We need to discard objects in the class constants if they happened
to be evaluated during preloading. To allow doing so, we need to
use mutable_data, which will place the evaluated constants into
a separate table.
2021-07-27 11:16:38 +02:00
Nikita Popov
c1959e63e5
Fix preloading of enums
...
We should not store constants that resolve to objects.
2021-07-27 11:01:44 +02:00
Nikita Popov
703e92c121
Don't force constant resolution for include preloading
...
Same as with property types, we no longer require that all constants
are resolved for preloading to work, it's just an optimization. As
such, drop the forced resolution for include-based preloading and
just keep the optimization.
2021-07-27 10:50:31 +02:00
Nikita Popov
70195c3561
Don't force property type resolution for include preloading
...
Having all property types resolved is no longer a hard requirement
for preloading, resolving the types is just an optimization. As
such, drop the special logic that forced loading of property
types when include-based preloading is used. Instead only keep
the code that resolves types based on actually preloaded classes.
Also drop the ZEND_ACC_PROPERTY_TYPES_RESOLVED flag, which is now
nearly useless and takes up flag space...
2021-07-27 10:36:21 +02:00
Dmitry Stogov
713eec75f2
Merge branch 'PHP-8.0'
...
* PHP-8.0:
Added test
2021-07-21 19:43:00 +03:00
Dmitry Stogov
17b5fe13e2
Added test
2021-07-21 19:29:59 +03:00
Dmitry Stogov
9108ac678e
Fixed test
2021-07-21 14:51:36 +03:00
Dmitry Stogov
a3a74b07e5
Merge branch 'PHP-8.0'
...
* PHP-8.0:
Fixed Bug #80959 (infinite loop in building cfg during JIT compilation)
2021-07-21 14:34:04 +03:00
Dmitry Stogov
a9991fbf28
Fixed Bug #80959 (infinite loop in building cfg during JIT compilation)
2021-07-21 14:32:44 +03:00
Dmitry Stogov
c22a4d76d5
Fixed test
2021-07-20 22:21:10 +03:00
Dmitry Stogov
4cf7a25856
Merge branch 'PHP-8.0'
...
* PHP-8.0:
Fixed Bug #81255 (Memory leak in PHPUnit with functional JIT)
2021-07-20 22:17:41 +03:00
Dmitry Stogov
02acc5ad3b
Fixed Bug #81255 (Memory leak in PHPUnit with functional JIT)
2021-07-20 22:14:32 +03:00
Christoph M. Becker
520a8e002a
Skip new preload test on Windows
2021-07-20 16:32:24 +02:00
Nikita Popov
c14c82e22f
Merge branch 'PHP-8.0'
...
* PHP-8.0:
Fix bug #81272 : Fix func info for functions returning EMPTY_ARRAY
2021-07-20 14:41:43 +02:00
Nikita Popov
051ff33660
Fix bug #81272 : Fix func info for functions returning EMPTY_ARRAY
...
The empty array has refcount > 1, so we should indicate this in
func info. In most cases this renders the func info redundant,
so drop it entirely.
2021-07-20 14:40:17 +02:00
Dmitry Stogov
1e4095f03d
Fixed bug #81256 (Assertion `zv != ((void *)0)' failed for "preload" with JIT)
2021-07-20 15:27:43 +03:00
Kamil Tekiela
052af90b86
Deprecate autovivification on false
...
Deprecate automatically converting "false" into an empty array
on write operands. Autovivification continues to be supported
for "null" values, as well as undefined/uninitialized values.
RFC: https://wiki.php.net/rfc/autovivification_false
Closes GH-7131.
Co-authored-by: Tyson Andre <tysonandre775@hotmail.com >
Co-authored-by: Nikita Popov <nikita.ppv@gmail.com >
2021-07-19 14:49:37 +02:00
Dmitry Stogov
de1a1d5a36
Merge branch 'PHP-8.0'
...
* PHP-8.0:
Fixed incorrec immediate encoding when using LEA optimization
2021-07-19 14:53:09 +03:00
Hao Sun
c5d93aeee9
Fixed incorrec immediate encoding when using LEA optimization
2021-07-19 14:51:08 +03:00
Máté Kocsis
75a678a7e3
Declare tentative return types for Zend ( #7251 )
...
Co-authored-by: Nikita Popov <nikita.ppv@gmail.com >
2021-07-19 13:44:20 +02:00
Dmitry Stogov
66328742ea
Merge branch 'PHP-8.0'
...
* PHP-8.0:
Fixed bug #81249 (Intermittent property assignment failure with JIT enabled)
2021-07-19 12:14:55 +03:00
Dmitry Stogov
c0e4932816
Fixed bug #81249 (Intermittent property assignment failure with JIT enabled)
2021-07-19 12:11:09 +03:00
Dmitry Stogov
58fb147cde
Merge branch 'PHP-8.0'
...
* PHP-8.0:
Skip test on 32-bit system
2021-07-19 10:51:10 +03:00
Dmitry Stogov
ee981619ce
Skip test on 32-bit system
2021-07-19 10:49:43 +03:00