Skip to content

Remove unnecessary F0 type information from OPCache #5024

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
79 changes: 1 addition & 78 deletions ext/opcache/Optimizer/zend_func_info.c
Original file line number Diff line number Diff line change
Expand Up @@ -197,11 +197,7 @@ static const func_info_t func_infos[] = {
FN("str_pad", MAY_BE_STRING),
F1("strchr", MAY_BE_FALSE | MAY_BE_STRING),
F1("sprintf", MAY_BE_FALSE | MAY_BE_STRING),
F0("printf", MAY_BE_FALSE | MAY_BE_LONG),
F0("vprintf", MAY_BE_FALSE | MAY_BE_LONG),
F1("vsprintf", MAY_BE_FALSE | MAY_BE_STRING),
F0("fprintf", MAY_BE_FALSE | MAY_BE_LONG),
F0("vfprintf", MAY_BE_FALSE | MAY_BE_LONG),
F1("sscanf", MAY_BE_NULL | MAY_BE_LONG | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_ANY),
F1("fscanf", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_ANY),
F1("parse_url", MAY_BE_FALSE | MAY_BE_LONG | MAY_BE_STRING | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_STRING | MAY_BE_ARRAY_OF_LONG),
Expand All @@ -213,7 +209,6 @@ static const func_info_t func_infos[] = {
#if defined(HAVE_SYMLINK) || defined(PHP_WIN32)
F1("readlink", MAY_BE_FALSE | MAY_BE_STRING),
#endif
F0("unlink", MAY_BE_FALSE | MAY_BE_TRUE),
F1("exec", MAY_BE_FALSE | MAY_BE_STRING),
F1("system", MAY_BE_FALSE | MAY_BE_STRING),
F1("escapeshellcmd", MAY_BE_STRING),
Expand All @@ -223,9 +218,6 @@ static const func_info_t func_infos[] = {
#ifdef PHP_CAN_SUPPORT_PROC_OPEN
F1("proc_open", MAY_BE_FALSE | MAY_BE_RESOURCE),
F1("proc_get_status", MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_FALSE | MAY_BE_ARRAY_OF_TRUE | MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_STRING),
#endif
#ifdef HAVE_NICE
F0("proc_nice", MAY_BE_FALSE | MAY_BE_TRUE),
#endif
F1("random_bytes", MAY_BE_STRING),
#if HAVE_GETSERVBYPORT
Expand Down Expand Up @@ -283,12 +275,8 @@ static const func_info_t func_infos[] = {
FN("forward_static_call_array", UNKNOWN_INFO),
F1("serialize", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
FN("unserialize", UNKNOWN_INFO),
F0("var_dump", MAY_BE_NULL),
F1("var_export", MAY_BE_NULL | MAY_BE_STRING),
F0("debug_zval_dump", MAY_BE_NULL),
F1("print_r", MAY_BE_TRUE | MAY_BE_STRING),
F0("memory_get_usage", MAY_BE_FALSE | MAY_BE_LONG),
F0("memory_get_peak_usage", MAY_BE_FALSE | MAY_BE_LONG),
F0("register_shutdown_function", MAY_BE_NULL | MAY_BE_FALSE),
F1("highlight_file", MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_STRING),
F1("show_source", MAY_BE_FALSE | MAY_BE_STRING),
Expand All @@ -301,7 +289,6 @@ static const func_info_t func_infos[] = {
F1("get_include_path", MAY_BE_FALSE | MAY_BE_STRING),
F1("set_include_path", MAY_BE_FALSE | MAY_BE_STRING),
F1("headers_list", MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
F0("http_response_code", MAY_BE_FALSE | MAY_BE_LONG),
F1("parse_ini_file", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_NULL | MAY_BE_ARRAY_OF_FALSE | MAY_BE_ARRAY_OF_TRUE | MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_DOUBLE | MAY_BE_ARRAY_OF_STRING | MAY_BE_ARRAY_OF_ARRAY),
F1("parse_ini_string", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_NULL | MAY_BE_ARRAY_OF_FALSE | MAY_BE_ARRAY_OF_TRUE | MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_DOUBLE | MAY_BE_ARRAY_OF_STRING | MAY_BE_ARRAY_OF_ARRAY),
#if ZEND_DEBUG
Expand All @@ -318,95 +305,46 @@ static const func_info_t func_infos[] = {
F1("dns_get_record", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_ARRAY),
# endif
#endif
F0("intval", MAY_BE_LONG),
F0("floatval", MAY_BE_DOUBLE),
F0("doubleval", MAY_BE_DOUBLE),
FN("strval", MAY_BE_STRING),
F0("boolval", MAY_BE_FALSE | MAY_BE_TRUE),
FN("gettype", MAY_BE_STRING),
F0("settype", MAY_BE_FALSE | MAY_BE_TRUE),
F0("pclose", MAY_BE_FALSE | MAY_BE_LONG),
F1("popen", MAY_BE_FALSE | MAY_BE_RESOURCE),
F0("readfile", MAY_BE_FALSE | MAY_BE_LONG),
F0("rewind", MAY_BE_FALSE | MAY_BE_TRUE),
F0("rmdir", MAY_BE_FALSE | MAY_BE_TRUE),
F0("umask", MAY_BE_FALSE | MAY_BE_LONG),
F0("fclose", MAY_BE_FALSE | MAY_BE_TRUE),
F0("feof", MAY_BE_FALSE | MAY_BE_TRUE),
F1("fgetc", MAY_BE_FALSE | MAY_BE_STRING),
F1("fgets", MAY_BE_FALSE | MAY_BE_STRING),
F1("fread", MAY_BE_FALSE | MAY_BE_STRING),
F1("fopen", MAY_BE_FALSE | MAY_BE_RESOURCE),
F0("fpassthru", MAY_BE_LONG),
F0("ftruncate", MAY_BE_FALSE | MAY_BE_TRUE),
F1("fstat", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_LONG),
F0("fseek", MAY_BE_LONG),
F0("ftell", MAY_BE_FALSE | MAY_BE_LONG),
F0("fflush", MAY_BE_FALSE | MAY_BE_TRUE),
F0("fwrite", MAY_BE_FALSE | MAY_BE_LONG),
F0("fputs", MAY_BE_FALSE | MAY_BE_LONG),
F0("mkdir", MAY_BE_FALSE | MAY_BE_TRUE),
F0("rename", MAY_BE_FALSE | MAY_BE_TRUE),
F0("copy", MAY_BE_FALSE | MAY_BE_TRUE),
F1("tempnam", MAY_BE_FALSE | MAY_BE_STRING),
F1("tmpfile", MAY_BE_FALSE | MAY_BE_RESOURCE),
F1("file", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
F1("file_get_contents", MAY_BE_FALSE | MAY_BE_STRING),
F0("file_put_contents", MAY_BE_FALSE | MAY_BE_LONG),
F0("stream_select", MAY_BE_FALSE | MAY_BE_LONG),
F1("stream_context_create", MAY_BE_FALSE | MAY_BE_RESOURCE),
F0("stream_context_set_params", MAY_BE_FALSE | MAY_BE_TRUE),
F1("stream_context_get_params", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_ANY),
F0("stream_context_set_option", MAY_BE_FALSE | MAY_BE_TRUE),
FN("stream_context_get_options", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_ANY),
FN("stream_context_get_default", MAY_BE_FALSE | MAY_BE_RESOURCE),
FN("stream_context_set_default", MAY_BE_FALSE | MAY_BE_RESOURCE),
FN("stream_filter_prepend", MAY_BE_FALSE | MAY_BE_RESOURCE),
FN("stream_filter_append", MAY_BE_FALSE | MAY_BE_RESOURCE),
F0("stream_filter_remove", MAY_BE_FALSE | MAY_BE_TRUE),
F1("stream_socket_client", MAY_BE_FALSE | MAY_BE_RESOURCE),
F1("stream_socket_server", MAY_BE_FALSE | MAY_BE_RESOURCE),
F1("stream_socket_accept", MAY_BE_FALSE | MAY_BE_RESOURCE),
F1("stream_socket_get_name", MAY_BE_FALSE | MAY_BE_STRING),
F1("stream_socket_recvfrom", MAY_BE_FALSE | MAY_BE_STRING),
F0("stream_socket_sendto", MAY_BE_FALSE | MAY_BE_LONG),
F0("stream_socket_enable_crypto", MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_LONG),
#ifdef HAVE_SHUTDOWN
F0("stream_socket_shutdown", MAY_BE_FALSE | MAY_BE_TRUE),
#endif
#if HAVE_SOCKETPAIR
F1("stream_socket_pair", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_RESOURCE),
#endif
F0("stream_copy_to_stream", MAY_BE_FALSE | MAY_BE_LONG),
F1("stream_get_contents", MAY_BE_FALSE | MAY_BE_STRING),
F0("stream_supports_lock", MAY_BE_FALSE | MAY_BE_TRUE),
F1("fgetcsv", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_NULL | MAY_BE_ARRAY_OF_STRING),
F0("fputcsv", MAY_BE_FALSE | MAY_BE_LONG),
F0("flock", MAY_BE_FALSE | MAY_BE_TRUE),
F1("get_meta_tags", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_STRING),
F0("stream_set_read_buffer", MAY_BE_FALSE | MAY_BE_LONG),
F0("stream_set_write_buffer", MAY_BE_FALSE | MAY_BE_LONG),
F0("set_file_buffer", MAY_BE_FALSE | MAY_BE_LONG),
F0("stream_set_chunk_size", MAY_BE_FALSE | MAY_BE_LONG),
F0("stream_set_blocking", MAY_BE_FALSE | MAY_BE_TRUE),
F0("socket_set_blocking", MAY_BE_FALSE | MAY_BE_TRUE),
F1("stream_get_meta_data", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_ANY),
F1("stream_get_line", MAY_BE_FALSE | MAY_BE_STRING),
F1("stream_get_wrappers", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
F1("stream_get_transports", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
F1("stream_resolve_include_path", MAY_BE_FALSE | MAY_BE_STRING),
F0("stream_is_local", MAY_BE_FALSE | MAY_BE_TRUE),
F1("get_headers", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_STRING | MAY_BE_ARRAY_OF_ARRAY),
#if HAVE_SYS_TIME_H || defined(PHP_WIN32)
F0("stream_set_timeout", MAY_BE_FALSE | MAY_BE_TRUE),
F0("socket_set_timeout", MAY_BE_FALSE | MAY_BE_TRUE),
#endif
F1("socket_get_status", MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_ANY),
#if HAVE_REALPATH || defined(ZTS)
F1("realpath", MAY_BE_FALSE | MAY_BE_STRING),
#endif
#ifdef HAVE_FNMATCH
F0("fnmatch", MAY_BE_FALSE | MAY_BE_TRUE),
#endif
F1("fsockopen", MAY_BE_FALSE | MAY_BE_RESOURCE),
FN("pfsockopen", MAY_BE_FALSE | MAY_BE_RESOURCE),
Expand Down Expand Up @@ -503,15 +441,12 @@ static const func_info_t func_infos[] = {
FN("array_key_last", MAY_BE_NULL | MAY_BE_LONG | MAY_BE_STRING),
F1("pos", UNKNOWN_INFO),
F1("assert_options", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG | MAY_BE_STRING | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING | MAY_BE_ARRAY_OF_OBJECT | MAY_BE_OBJECT),
F0("version_compare", MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_LONG),
F1("str_rot13", MAY_BE_STRING),
F1("stream_get_filters", MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
F0("stream_filter_register", MAY_BE_FALSE | MAY_BE_TRUE),
F1("stream_bucket_make_writeable", MAY_BE_NULL | MAY_BE_OBJECT),
F1("stream_bucket_prepend", MAY_BE_FALSE | MAY_BE_OBJECT),
F1("stream_bucket_append", MAY_BE_FALSE | MAY_BE_OBJECT),
F1("stream_bucket_new", MAY_BE_FALSE | MAY_BE_OBJECT),
F0("output_reset_rewrite_vars", MAY_BE_FALSE),
F1("sys_get_temp_dir", MAY_BE_STRING),

/* ext/date */
Expand Down Expand Up @@ -772,22 +707,16 @@ static const func_info_t func_infos[] = {
F1("hash_algos", MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
F1("hash_pbkdf2", MAY_BE_STRING),
F1("mhash_keygen_s2k", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
F0("mhash_get_block_size", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
F1("mhash_get_hash_name", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
F0("mhash_count", MAY_BE_LONG),
F1("mhash", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),

/* ext/sodium */
F0("sodium_memzero", MAY_BE_NULL),
F0("sodium_increment", MAY_BE_NULL),
F0("sodium_add", MAY_BE_NULL),
F0("sodium_memcmp", MAY_BE_NULL | MAY_BE_LONG),
F1("sodium_crypto_shorthash", MAY_BE_NULL | MAY_BE_STRING),
F1("sodium_crypto_secretbox", MAY_BE_NULL | MAY_BE_STRING),
F1("sodium_crypto_secretbox_open", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
F1("sodium_crypto_generichash", MAY_BE_NULL | MAY_BE_STRING),
F1("sodium_crypto_generichash_init", MAY_BE_NULL | MAY_BE_STRING),
F0("sodium_crypto_generichash_update", MAY_BE_NULL | MAY_BE_TRUE),
F0("sodium_crypto_generichash_update", MAY_BE_TRUE),
F1("sodium_crypto_generichash_final", MAY_BE_NULL | MAY_BE_STRING),
F1("sodium_crypto_box_keypair", MAY_BE_STRING),
F1("sodium_crypto_box_seed_keypair", MAY_BE_NULL | MAY_BE_STRING),
Expand All @@ -804,12 +733,10 @@ static const func_info_t func_infos[] = {
F1("sodium_crypto_sign", MAY_BE_NULL | MAY_BE_STRING),
F1("sodium_crypto_sign_open", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
F1("sodium_crypto_sign_detached", MAY_BE_NULL | MAY_BE_STRING),
F0("sodium_crypto_sign_verify_detached", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
F1("sodium_crypto_stream", MAY_BE_NULL | MAY_BE_STRING),
F1("sodium_crypto_stream_xor", MAY_BE_NULL | MAY_BE_STRING),
F1("sodium_crypto_pwhash", MAY_BE_NULL | MAY_BE_STRING),
F1("sodium_crypto_pwhash_str", MAY_BE_NULL | MAY_BE_STRING),
F0("sodium_crypto_pwhash_str_verify", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
F1("sodium_crypto_aead_aes256gcm_encrypt", MAY_BE_NULL | MAY_BE_STRING),
F1("sodium_crypto_aead_aes256gcm_decrypt", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
F1("sodium_bin2hex", MAY_BE_NULL | MAY_BE_STRING),
Expand All @@ -822,8 +749,6 @@ static const func_info_t func_infos[] = {
F1("sodium_crypto_kx_client_session_keys", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
F1("sodium_crypto_kx_server_session_keys", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
F1("sodium_crypto_auth", MAY_BE_NULL | MAY_BE_STRING),
F0("sodium_crypto_auth_verify", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
F0("sodium_compare", MAY_BE_NULL | MAY_BE_LONG),
F1("sodium_crypto_aead_aes256gcm_keygen", MAY_BE_STRING),
F1("sodium_crypto_auth_keygen", MAY_BE_STRING),
F1("sodium_crypto_generichash_keygen", MAY_BE_STRING),
Expand All @@ -841,8 +766,6 @@ static const func_info_t func_infos[] = {
F1("sodium_crypto_sign_publickey_from_secretkey", MAY_BE_NULL | MAY_BE_STRING),
F1("sodium_crypto_pwhash_scryptsalsa208sha256", MAY_BE_NULL | MAY_BE_STRING),
F1("sodium_crypto_pwhash_scryptsalsa208sha256_str", MAY_BE_NULL | MAY_BE_STRING),
F0("sodium_crypto_pwhash_scryptsalsa208sha256_str_verify", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
F0("sodium_crypto_aead_aes256gcm_is_available", MAY_BE_FALSE | MAY_BE_TRUE),
F1("sodium_crypto_sign_ed25519_sk_to_curve25519", MAY_BE_NULL | MAY_BE_STRING),
F1("sodium_crypto_sign_ed25519_pk_to_curve25519", MAY_BE_NULL | MAY_BE_STRING),
F1("sodium_crypto_aead_chacha20poly1305_encrypt", MAY_BE_NULL | MAY_BE_STRING),
Expand Down
2 changes: 1 addition & 1 deletion ext/standard/basic_functions.stub.php
Original file line number Diff line number Diff line change
Expand Up @@ -1192,7 +1192,7 @@ function floatval($value): float {}
function boolval($value): bool {}

/** @param mixed $value */
function strval($value): float {}
function strval($value): string {}

/** @param mixed $value */
function is_null($value): bool {}
Expand Down
8 changes: 4 additions & 4 deletions ext/standard/basic_functions_arginfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -1841,7 +1841,9 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_boolval, 0, 1, _IS_BOOL, 0)
ZEND_ARG_INFO(0, value)
ZEND_END_ARG_INFO()

#define arginfo_strval arginfo_floatval
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_strval, 0, 1, IS_STRING, 0)
ZEND_ARG_INFO(0, value)
ZEND_END_ARG_INFO()

#define arginfo_is_null arginfo_boolval

Expand Down Expand Up @@ -1940,9 +1942,7 @@ ZEND_END_ARG_INFO()

#define arginfo_debug_zval_dump arginfo_var_dump

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_serialize, 0, 1, IS_STRING, 0)
ZEND_ARG_INFO(0, value)
ZEND_END_ARG_INFO()
#define arginfo_serialize arginfo_strval

ZEND_BEGIN_ARG_INFO_EX(arginfo_unserialize, 0, 0, 1)
ZEND_ARG_TYPE_INFO(0, value, IS_STRING, 0)
Expand Down