diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2019-08-26 16:10:29 +0200 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2019-08-26 16:12:03 +0200 |
commit | e2b49d6c45f0c5ed69268d32da2f4972265db663 (patch) | |
tree | 8dcf0200acb2c48d536f1666f2d28819ca4d22a7 | |
parent | 8f897f1040f00210f4a5cdd82a88a1fe3e558955 (diff) | |
download | php-git-e2b49d6c45f0c5ed69268d32da2f4972265db663.tar.gz |
Don't use needs_live_range hook for "special" live ranges
In particular we were disgarding SILENCE live ranges in opcache,
because we decided that a MAY_BE_LONG type does not need a live
range.
-rw-r--r-- | Zend/tests/uncaught_exception_error_supression.phpt | 18 | ||||
-rw-r--r-- | Zend/zend_opcode.c | 11 |
2 files changed, 24 insertions, 5 deletions
diff --git a/Zend/tests/uncaught_exception_error_supression.phpt b/Zend/tests/uncaught_exception_error_supression.phpt new file mode 100644 index 0000000000..1130a9d99b --- /dev/null +++ b/Zend/tests/uncaught_exception_error_supression.phpt @@ -0,0 +1,18 @@ +--TEST-- +Error suppression should have no impact on uncaught exceptions +--FILE-- +<?php + +function abc() { + throw new Error('Example Exception'); +} + +@abc(); + +?> +--EXPECTF-- +Fatal error: Uncaught Error: Example Exception in %s:%d +Stack trace: +#0 %s(%d): abc() +#1 {main} + thrown in %s on line %d diff --git a/Zend/zend_opcode.c b/Zend/zend_opcode.c index ff6bcfd9c4..fe81585daf 100644 --- a/Zend/zend_opcode.c +++ b/Zend/zend_opcode.c @@ -655,6 +655,12 @@ static void emit_live_range( default: start++; kind = ZEND_LIVE_TMPVAR; + + /* Check hook to determine whether a live range is necessary, + * e.g. based on type info. */ + if (needs_live_range && !needs_live_range(op_array, orig_def_opline)) { + return; + } break; } case ZEND_COPY_TMP: @@ -694,11 +700,6 @@ static void emit_live_range( } } - /* Check hook to determine whether a live range is necessary, e.g. based on type info. */ - if (needs_live_range && !needs_live_range(op_array, orig_def_opline)) { - return; - } - emit_live_range_raw(op_array, var_num, kind, start, end); } |