Kalle Sommer Nielsen
59a7da7b49
Fix opcache build
2016-07-30 17:55:20 +02:00
Nikita Popov
5f6effed43
Add opcodes to zend_wrong_string_offset()
2016-07-10 15:15:34 +02:00
Aaron Piotrowski
d9a9cf8eca
Merge branch 'master' into iterable
2016-07-03 22:42:10 -05:00
Dmitry Stogov
d898344663
Inline simple constant functions
2016-06-30 17:04:25 +03:00
Dmitry Stogov
871cd76af4
clanup
2016-06-29 17:53:39 +03:00
Nikita Popov
2710ce22a0
Remove assert for now
2016-06-28 18:47:29 +02:00
Nikita Popov
cdd58edf42
More type inferences fixes
2016-06-28 11:49:50 +02:00
Dmitry Stogov
1433162083
Fixed compilation warnings
2016-06-21 20:12:29 +03:00
Nikita Popov
811dfba4bf
More type inference fixes
2016-06-16 14:25:48 +02:00
Dmitry Stogov
ff363e2e7c
Implemented RFC: Replace "Missing argument" warning with "Too few arguments" exception
...
Squashed commit of the following:
commit 8b45fa2acb
Author: Dmitry Stogov <dmitry@zend.com>
Date: Thu Jun 16 01:52:50 2016 +0300
Separate slow path of ZEND_RECV into a cold function.
commit 9e18895ee5
Author: Dmitry Stogov <dmitry@zend.com>
Date: Wed Jun 15 23:26:28 2016 +0300
Required argument can't be IS_UNDEF anymore.
commit 662db66e39
Author: Dmitry Stogov <dmitry@zend.com>
Date: Tue May 31 17:14:50 2016 +0300
Replace "Missing argument" warning by "Too few arguments" exception.
2016-06-16 02:32:02 +03:00
Dmitry Stogov
a9512af810
Implemented RFC: Fix inconsistent behavior of $this variable
...
Squashed commit of the following:
commit bdd3b6895c
Author: Dmitry Stogov <dmitry@zend.com>
Date: Thu Jun 16 00:19:42 2016 +0300
Fixed GOTO VM
commit 2f1d7c8b89
Author: Dmitry Stogov <dmitry@zend.com>
Date: Wed Jun 15 21:01:57 2016 +0300
Removed unused variable
commit cf749c42b0
Author: Dmitry Stogov <dmitry@zend.com>
Date: Wed Jun 15 19:06:16 2016 +0300
Protection from $this reassign through mb_parse_str()
commit 59a9a6c83c
Author: Dmitry Stogov <dmitry@zend.com>
Date: Wed Jun 15 18:14:50 2016 +0300
Added type inference rule for FETCH_THIS opcode
commit 73f8d14a85
Author: Dmitry Stogov <dmitry@zend.com>
Date: Wed Jun 15 18:11:18 2016 +0300
Restored PHP-7 behavior of isset($this->foo).
It throws exception if not in object context.
Removed useless opcode handlers.
commit fa0881381e
Author: Dmitry Stogov <dmitry@zend.com>
Date: Tue May 31 12:25:47 2016 +0300
Changed "Notice: Undefined variable: this" into "Exception: Using $this when not in object context".
commit e32cc528c0
Author: Dmitry Stogov <dmitry@zend.com>
Date: Tue May 24 02:02:43 2016 +0300
Throw exception on attempt to re-assign $this through extract() and parse_str().
commit 41f1531b52
Author: Dmitry Stogov <dmitry@zend.com>
Date: Mon May 23 22:18:36 2016 +0300
Fixed inconsistent $this behavior
2016-06-16 02:30:23 +03:00
Nikita Popov
fba6f90ae3
Fix type inference bugs
...
* Add proper array_key_any|array_of_any|array_of_ref in some more
places
* strlen() on objects may be null
* IS fetch on string dim may be null
2016-06-15 22:52:48 +02:00
Dmitry Stogov
d12987256a
Fixed mistakes in type inference rules.
2016-06-15 23:04:17 +03:00
Nikita Popov
046889518d
Add support for "instanceof" pi nodes
2016-06-13 19:03:59 +02:00
Nikita Popov
9877d8f019
Use union for pi constraints
...
This will make it easier to extend pi constraints without impacting
structure sizes.
2016-06-13 19:03:57 +02:00
Aaron Piotrowski
0dc772c9b4
Add iterable type to opcache
2016-06-10 19:01:27 -05:00
Nikita Popov
be37de1ff1
Use LCA for object(ce) type joins
...
For B, C extending A the join of object(B) and object(C) should
be object(instanceof A). For simplicity we only handle the class
hierarchy, as computing the least common unique ancestor for
interfaces would be more involved.
Also ignore phi sources that don't have an object type: The join
of null and object(A) is now null|object(A) rather than
null|object.
2016-06-07 20:42:00 +02:00
Nikita Popov
d8a2370884
Cleanup
2016-06-07 20:42:00 +02:00
Dmitry Stogov
80b39b498a
Improve type narrowing (check only SSA definitions).
2016-06-06 14:57:02 +03:00
Nikita Popov
543649bd4c
Fix correctness issues with type narrowing
...
Fixes bug #72335 .
2016-06-06 14:56:17 +03:00
Dmitry Stogov
b111da96d9
Split ZEND_SEND_VAR_NO_REF into ZEND_SEND_VAR_NO_REF and ZEND_SEND_VAR_NO_REF_EX (similar to ZEND_SEND_VAL) and remove ZEND_ARG_* flags.
2016-05-31 04:06:00 +03:00
Nikita Popov
e745b4cad8
Replace BB end with BB len
...
And support empty blocks everywhere.
2016-05-24 18:29:44 +02:00
Nikita Popov
dd8379e046
Inference: $a[]= results in long keys
2016-05-14 17:16:32 +02:00
Nikita Popov
6079ba4b0c
Inference: Fix undef handling for binary ops
...
We need to be careful about correctly handling that undef results
in a null value. Otherwise, apart from simply generating incorrect
results, we may also end up performing non-monotonic lattice
transitions, thus causing an infinite type inference loop (see
test).
2016-05-14 17:16:32 +02:00
Nikita Popov
773b377888
Inference: Use common handling for compound assign ops
...
Extract the inference code for binary operators and then handle all
ASSIGN_* opcodes the same way.
2016-05-14 17:16:32 +02:00
Nikita Popov
c5160d78f1
Add COPY_SSA_OBJ_TYPE macro
...
Use it consistently in the ASSIGN_* implementations, previously
it was only present in ASSIGN_ADD.
2016-05-14 17:16:32 +02:00
Nikita Popov
94d09163e7
Fix & improve assign_dim inference
...
Extract a helper function for handling ASSIGN_DIM and ASSIGN_*
with ASSIGN_DIM ev uniformly. Previously the code was copy pasted
for each ASSIGN_* op, but the variable names were not correctly
adjusted (tmp vs orig), so the type inference result was wrong.
Also sligthly improve handling:
* Result cannot be false, will always be converted to array.
* If the dim is a CONST string operand, we don't have to assume
numeric strings.
* If the inserted value may be undef, the array may contain null.
2016-05-14 17:16:32 +02:00
Dmitry Stogov
172d8552fc
Fixed type inference rules.
2016-05-04 23:59:17 +03:00
Nikita Popov
0615c59a4f
Mark all $php_errormsg as refs to inhibit optimization
2016-04-30 12:34:01 +02:00
Nikita Popov
55caaac73f
Make MAY_BE_ERROR handling more accurate
...
This ended up causing weird things like MAY_BE_ERROR CVs.
Also make sure that ASSIGN result isn't MAY_BE_REF.
2016-04-21 23:49:20 +02:00
Nikita Popov
4f726be682
Fix SSA for SEND_UNPACK
2016-04-16 22:38:52 +02:00
Dmitry Stogov
aed4249653
Fixed handling of return statement without a value.
2016-04-07 18:59:04 +03:00
Dmitry Stogov
3444c1ae24
Use return type hints for type inference and eliminate useless VERIFY_RETRUN_TYPE opcodes.
2016-04-07 17:34:53 +03:00
Dmitry Stogov
82050dfd3c
fixed type inference mistake (typo)
2016-04-01 20:29:54 +03:00
Dmitry Stogov
f3c70f118c
Manual CSE
2016-03-31 17:26:27 +03:00
Kalle Sommer Nielsen
fc49f1c411
Fix build
2016-03-17 03:53:01 +01:00
Nikita Popov
47391961dd
Mark uses in UNSET_VAR op1 + FE_FETCH_R op2 as no_val
2016-03-14 17:57:07 +01:00
Nikita Popov
a1c48d5e3a
Various SSA-related tweaks
...
* Add FETCH_LIST to inference
* Restrict JMP_SET/COALESCE result type
* Fix typos in range inference
* Add const annotations in zend_ssa.h
* For pi statements dump the associated predecessor block
* If type can be both true and false, dump bool instead
2016-02-28 21:38:34 +01:00
Dmitry Stogov
4095d5f245
Cleanup OP_DATA usage. Now only first operand of OP_DATA is used for ASSIGN_DIM, ASSIGN_OBJ and ASSIGN_OP (DIM/OBJ) instructions.
2016-02-09 13:12:57 +03:00
Dmitry Stogov
f4bec6e137
After DFA pass result of FE_FETCH may be CV
2016-02-09 12:16:17 +03:00
Nikita Popov
cf6aa46dbd
Fix SSA for ZEND_YIELD
...
Yield-by-ref defs a ref var, yield-by-var only defs an rc1/rcn var
if rc inference is used.
Also move BIND_LEXICAL where it belongs in DFG construction.
2016-01-24 23:03:50 +01:00
Nikita Popov
5662d73528
Add support for Pi type constraints
...
Supports TYPE_CHECK and IS_IDENTICAL for now.
2016-01-19 22:09:29 +01:00
Dmitry Stogov
a2ff3a46a4
Use ZEND_FUNC_INDIRECT_VAR_ASSESS instead of ZEND_FUNC_TOO_DYNAMIC. Handle function with exceptions handlers and generators separately.
2016-01-19 15:33:08 +03:00
Dmitry Stogov
6579e48417
Introduced BIND_STATIC opcode instead of FETCH_R/FETCH_W(static)+ASSIGN/ASSIGN_REF (similar to BIND_GLOBAL).
...
In the future we may refer to static variable by index instead of name, to eliminate hash lookup.
2016-01-12 12:20:35 +03:00
Nikita Popov
c602ac60b9
Fix CE fetching for NEW object type inference
...
Create a common function for getting a class entry.
2016-01-07 18:53:10 +01:00
Nikita Popov
04dc5d7420
Range&type inference for JMP_SET
2016-01-07 18:53:02 +01:00
Lior Kaplan
71c1980025
Happy new year (Update copyright to 2016)
2016-01-01 20:06:12 +02:00
Nikita Popov
65e456f364
Introduce BIND_LEXICAL
...
This opcodes inserts a local CV into the closure static variable
table. This replaces the previous mechanism of having static
variables marked as LEXICAL, which perform a symtable lookup
during copying.
This means a) functions which contain closures no longer have to
rebuild their symtable (better performance) and b) we can now track
used variables in SSA.
2015-12-29 23:14:53 +01:00
Nikita Popov
33870c525a
Don't reuse SSA var in UNSET_VAR
...
Instead use the SSA var that UNSET_VAR actually defines. Otherwise
we get issues trying to DCE unsets.
2015-12-26 23:33:58 +01:00
Dmitry Stogov
b3d0178915
Rearrange code to enable inner precedure inference
2015-12-24 19:05:27 +03:00