diff options
author | Joe Watkins <krakjoe@php.net> | 2019-02-21 23:54:26 +0100 |
---|---|---|
committer | Joe Watkins <krakjoe@php.net> | 2019-02-21 23:54:26 +0100 |
commit | 4d3415636d4e68144c08ce77f0430c4702782c55 (patch) | |
tree | e8afce3c414bf657c6bd5caa5c79b02d0d62bb5c | |
parent | 0bbbd0f9e7449a2f204f959d06e5266175a86be9 (diff) | |
download | php-git-4d3415636d4e68144c08ce77f0430c4702782c55.tar.gz |
While the compiler does not have the FBC set for zend_get_call_op, optimizer does, and so incorrectly results in ignoring these flags.
If someone has a better patch, please merge it ASAP, this appears to be correct as I and Nikita originally thought.
Revert "Revert "zend_get_call_op ignoring compiler flags zend_get_call_op will ignore ZEND_COMPILE_IGNORE_USER_FUNCTIONS and ZEND_COMPILE_IGNORE_USER_FUNCTIONS, breaking the intention of these flags""
This reverts commit 0bbbd0f9e7449a2f204f959d06e5266175a86be9.
-rw-r--r-- | UPGRADING.INTERNALS | 6 | ||||
-rw-r--r-- | Zend/zend_compile.c | 4 |
2 files changed, 8 insertions, 2 deletions
diff --git a/UPGRADING.INTERNALS b/UPGRADING.INTERNALS index 578637144b..fa02216f50 100644 --- a/UPGRADING.INTERNALS +++ b/UPGRADING.INTERNALS @@ -17,6 +17,7 @@ PHP 7.4 INTERNALS UPGRADE NOTES n. Assignments to references o. ZEND_COMPILE_EXTENDED_INFO split p. ZEND_EXT_FCALL_BEGIN can access arguments + q. ZEND_COMPILE_IGNORE_USER_FUNCTIONS and ZEND_COMPILE_IGNORE_INTERNAL_FUNCTIONS 2. Build system changes a. Abstract @@ -178,6 +179,11 @@ PHP 7.4 INTERNALS UPGRADE NOTES p. ZEND_EXT_BEGIN_FCALL is emitted after arguments are sent, this means that handlers may access arguments. + q. ZEND_COMPILE_IGNORE_USER_FUNCTIONS and ZEND_COMPILE_IGNORE_INTERNAL_FUNCTIONS + are respected by zend_get_call_op such that when set, the only possible + call opcodes are ZEND_DO_FCALL and ZEND_DO_FCALL_BY_NAME, previously they + were ignored by zend_get_call_op. + ======================== 2. Build system changes ======================== diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 1f6449fa94..eee2347f49 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -3044,7 +3044,7 @@ uint32_t zend_compile_args(zend_ast *ast, zend_function *fbc) /* {{{ */ ZEND_API zend_uchar zend_get_call_op(const zend_op *init_op, zend_function *fbc) /* {{{ */ { if (fbc) { - if (fbc->type == ZEND_INTERNAL_FUNCTION) { + if (fbc->type == ZEND_INTERNAL_FUNCTION && !(CG(compiler_options) & ZEND_COMPILE_IGNORE_INTERNAL_FUNCTIONS)) { if (init_op->opcode == ZEND_INIT_FCALL && !zend_execute_internal) { if (!(fbc->common.fn_flags & (ZEND_ACC_ABSTRACT|ZEND_ACC_DEPRECATED|ZEND_ACC_HAS_TYPE_HINTS|ZEND_ACC_RETURN_REFERENCE))) { return ZEND_DO_ICALL; @@ -3052,7 +3052,7 @@ ZEND_API zend_uchar zend_get_call_op(const zend_op *init_op, zend_function *fbc) return ZEND_DO_FCALL_BY_NAME; } } - } else { + } else if (!(CG(compiler_options) & ZEND_COMPILE_IGNORE_USER_FUNCTIONS)){ if (zend_execute_ex == execute_ex && !(fbc->common.fn_flags & ZEND_ACC_ABSTRACT)) { return ZEND_DO_UCALL; } |