From 6f2fc6130aca7badce4489cacbe02485dd586bc3 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Fri, 20 Jan 2023 09:33:22 +0100 Subject: [PATCH] Zend/Optimizer/zend_func_info.h: remove forward declarations These were added by commit c88ffa9a5673cb, but @dstogov himself opposed to the concept of forward declarations, see https://github.com/php/php-src/pull/10338#discussion_r1071148150 (which I don't agree with - in my opinion, forward declarations are a useful tool to reduce header dependencies). Removing these unnecessary forward declarations requires some fiddling with include directives, because they were inconsistent and fragile previously. (They still are, but this PR does not attempt to change this; it only makes problems caused by the forward declaration removal go away.) Please merge this PR if (and only if) my RFC "include cleanup" (https://wiki.php.net/rfc/include_cleanup) gets rejected, to fix the PHP code base according to the RFC decision. --- Zend/Optimizer/dfa_pass.c | 1 - Zend/Optimizer/zend_call_graph.h | 9 ++++++--- Zend/Optimizer/zend_cfg.c | 4 +++- Zend/Optimizer/zend_cfg.h | 2 ++ Zend/Optimizer/zend_dump.c | 1 - Zend/Optimizer/zend_func_info.h | 4 ---- Zend/Optimizer/zend_inference.c | 2 +- Zend/Optimizer/zend_optimizer_internal.h | 2 +- Zend/zend_compile.h | 2 -- Zend/zend_execute.c | 2 +- Zend/zend_execute.h | 2 ++ Zend/zend_extensions.c | 1 + Zend/zend_float.c | 1 + Zend/zend_globals.h | 2 +- Zend/zend_ini.h | 3 +++ Zend/zend_language_scanner.h | 5 +++++ Zend/zend_multibyte.c | 1 + Zend/zend_stream.c | 1 + ext/opcache/ZendAccelerator.h | 2 ++ ext/opcache/jit/zend_jit.c | 1 - ext/opcache/jit/zend_jit_vm_helpers.c | 1 - ext/opcache/zend_persist.c | 2 +- 22 files changed, 32 insertions(+), 19 deletions(-) diff --git a/Zend/Optimizer/dfa_pass.c b/Zend/Optimizer/dfa_pass.c index 6ef0bfb2e0745..a10399d9bc1a7 100644 --- a/Zend/Optimizer/dfa_pass.c +++ b/Zend/Optimizer/dfa_pass.c @@ -25,7 +25,6 @@ #include "zend_bitset.h" #include "zend_cfg.h" #include "zend_ssa.h" -#include "zend_func_info.h" #include "zend_call_graph.h" #include "zend_inference.h" #include "zend_dump.h" diff --git a/Zend/Optimizer/zend_call_graph.h b/Zend/Optimizer/zend_call_graph.h index 5b1634d561dc3..7e60388991c90 100644 --- a/Zend/Optimizer/zend_call_graph.h +++ b/Zend/Optimizer/zend_call_graph.h @@ -20,13 +20,14 @@ #define ZEND_CALL_GRAPH_H #include "zend_ssa.h" -#include "zend_func_info.h" #include "zend_optimizer.h" typedef struct _zend_send_arg_info { zend_op *opline; } zend_send_arg_info; +typedef struct _zend_call_info zend_call_info; + struct _zend_call_info { zend_op_array *caller_op_array; zend_op *caller_init_opline; @@ -42,7 +43,7 @@ struct _zend_call_info { zend_send_arg_info arg_info[1]; }; -struct _zend_func_info { +typedef struct _zend_func_info { int num; uint32_t flags; zend_ssa ssa; /* Static Single Assignment Form */ @@ -50,7 +51,7 @@ struct _zend_func_info { zend_call_info *callee_info; /* which functions are called from this one */ zend_call_info **call_map; /* Call info associated with init/call/send opnum */ zend_ssa_var_info return_info; -}; +} zend_func_info; typedef struct _zend_call_graph { int op_arrays_count; @@ -58,6 +59,8 @@ typedef struct _zend_call_graph { zend_func_info *func_infos; } zend_call_graph; +#include "zend_func_info.h" + BEGIN_EXTERN_C() ZEND_API void zend_build_call_graph(zend_arena **arena, zend_script *script, zend_call_graph *call_graph); diff --git a/Zend/Optimizer/zend_cfg.c b/Zend/Optimizer/zend_cfg.c index 6d538f71316cc..8cb0cdddb5112 100644 --- a/Zend/Optimizer/zend_cfg.c +++ b/Zend/Optimizer/zend_cfg.c @@ -18,11 +18,13 @@ #include "zend_compile.h" #include "zend_cfg.h" -#include "zend_func_info.h" +#include "zend_call_graph.h" #include "zend_worklist.h" #include "zend_optimizer.h" #include "zend_optimizer_internal.h" #include "zend_sort.h" +#include "zend_arena.h" +#include "zend_globals.h" static void zend_mark_reachable(zend_op *opcodes, zend_cfg *cfg, zend_basic_block *b) /* {{{ */ { diff --git a/Zend/Optimizer/zend_cfg.h b/Zend/Optimizer/zend_cfg.h index 93d455060686e..175a51b1bd5c6 100644 --- a/Zend/Optimizer/zend_cfg.h +++ b/Zend/Optimizer/zend_cfg.h @@ -19,6 +19,8 @@ #ifndef ZEND_CFG_H #define ZEND_CFG_H +#include "zend_arena.h" + /* zend_basic_block.flags */ #define ZEND_BB_START (1<<0) /* first block */ #define ZEND_BB_FOLLOW (1<<1) /* follows the next block */ diff --git a/Zend/Optimizer/zend_dump.c b/Zend/Optimizer/zend_dump.c index 41146bdad97ec..507de662773ea 100644 --- a/Zend/Optimizer/zend_dump.c +++ b/Zend/Optimizer/zend_dump.c @@ -20,7 +20,6 @@ #include "zend_cfg.h" #include "zend_ssa.h" #include "zend_inference.h" -#include "zend_func_info.h" #include "zend_call_graph.h" #include "zend_dump.h" diff --git a/Zend/Optimizer/zend_func_info.h b/Zend/Optimizer/zend_func_info.h index b53683bdf5e70..1144890b11ed0 100644 --- a/Zend/Optimizer/zend_func_info.h +++ b/Zend/Optimizer/zend_func_info.h @@ -40,10 +40,6 @@ #define ZEND_FUNC_JIT_ON_HOT_COUNTERS (1<<15) /* used by JIT */ #define ZEND_FUNC_JIT_ON_HOT_TRACE (1<<16) /* used by JIT */ - -typedef struct _zend_func_info zend_func_info; -typedef struct _zend_call_info zend_call_info; - #define ZEND_FUNC_INFO(op_array) \ ((zend_func_info*)((op_array)->reserved[zend_func_info_rid])) diff --git a/Zend/Optimizer/zend_inference.c b/Zend/Optimizer/zend_inference.c index e72e7b474bb39..9d3166854d668 100644 --- a/Zend/Optimizer/zend_inference.c +++ b/Zend/Optimizer/zend_inference.c @@ -19,11 +19,11 @@ #include "zend_compile.h" #include "zend_generators.h" #include "zend_inference.h" -#include "zend_func_info.h" #include "zend_call_graph.h" #include "zend_closures.h" #include "zend_worklist.h" #include "zend_optimizer_internal.h" +#include "zend_globals.h" /* The used range inference algorithm is described in: * V. Campos, R. Rodrigues, I. de Assis Costa and F. Pereira. diff --git a/Zend/Optimizer/zend_optimizer_internal.h b/Zend/Optimizer/zend_optimizer_internal.h index 769db6357bcf7..a1b44ad07a871 100644 --- a/Zend/Optimizer/zend_optimizer_internal.h +++ b/Zend/Optimizer/zend_optimizer_internal.h @@ -23,7 +23,7 @@ #define ZEND_OPTIMIZER_INTERNAL_H #include "zend_ssa.h" -#include "zend_func_info.h" +#include "zend_call_graph.h" #define ZEND_OP1_LITERAL(opline) (op_array)->literals[(opline)->op1.constant] #define ZEND_OP1_JMP_ADDR(opline) OP_JMP_ADDR(opline, (opline)->op1) diff --git a/Zend/zend_compile.h b/Zend/zend_compile.h index d32b14dda9813..53cae4ff94566 100644 --- a/Zend/zend_compile.h +++ b/Zend/zend_compile.h @@ -758,8 +758,6 @@ struct _zend_execute_data { #define ZEND_EXTRA_VALUE 1 -#include "zend_globals.h" - typedef enum _zend_compile_position { ZEND_COMPILE_POSITION_AT_SHEBANG = 0, ZEND_COMPILE_POSITION_AT_OPEN_TAG, diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index 51d68294ec528..3633152f1ef3b 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -43,7 +43,7 @@ #include "zend_observer.h" #include "zend_system_id.h" #include "zend_call_stack.h" -#include "Optimizer/zend_func_info.h" +#include "Optimizer/zend_call_graph.h" /* Virtual current working directory support */ #include "zend_virtual_cwd.h" diff --git a/Zend/zend_execute.h b/Zend/zend_execute.h index c0f8017248e24..f79c391b33eff 100644 --- a/Zend/zend_execute.h +++ b/Zend/zend_execute.h @@ -25,6 +25,7 @@ #include "zend_hash.h" #include "zend_operators.h" #include "zend_variables.h" +#include "zend_globals.h" BEGIN_EXTERN_C() struct _zend_fcall_info; @@ -186,6 +187,7 @@ ZEND_API zend_result ZEND_FASTCALL zval_update_constant_ex(zval *pp, zend_class_ ZEND_API zend_result ZEND_FASTCALL zval_update_constant_with_ctx(zval *pp, zend_class_entry *scope, zend_ast_evaluate_ctx *ctx); /* dedicated Zend executor functions - do not use! */ +typedef struct _zend_vm_stack *zend_vm_stack; struct _zend_vm_stack { zval *top; zval *end; diff --git a/Zend/zend_extensions.c b/Zend/zend_extensions.c index ffcd32aa08fdc..174cc81c756af 100644 --- a/Zend/zend_extensions.c +++ b/Zend/zend_extensions.c @@ -19,6 +19,7 @@ #include "zend_extensions.h" #include "zend_system_id.h" +#include "zend_globals.h" ZEND_API zend_llist zend_extensions; ZEND_API uint32_t zend_extension_flags = 0; diff --git a/Zend/zend_float.c b/Zend/zend_float.c index 90af0c4a5f900..43e4b55f8bd02 100644 --- a/Zend/zend_float.c +++ b/Zend/zend_float.c @@ -19,6 +19,7 @@ #include "zend.h" #include "zend_compile.h" #include "zend_float.h" +#include "zend_globals.h" ZEND_API void zend_init_fpu(void) /* {{{ */ { diff --git a/Zend/zend_globals.h b/Zend/zend_globals.h index a2439b80eabcb..af677c318b00f 100644 --- a/Zend/zend_globals.h +++ b/Zend/zend_globals.h @@ -38,6 +38,7 @@ #include "zend_multiply.h" #include "zend_arena.h" #include "zend_call_stack.h" +#include "zend_ini.h" /* Define ZTS if you want a thread-safe Zend */ /*#undef ZTS*/ @@ -66,7 +67,6 @@ END_EXTERN_C() #undef function_table typedef struct _zend_vm_stack *zend_vm_stack; -typedef struct _zend_ini_entry zend_ini_entry; typedef struct _zend_fiber_context zend_fiber_context; typedef struct _zend_fiber zend_fiber; diff --git a/Zend/zend_ini.h b/Zend/zend_ini.h index deb61dae370ac..daf1a883c9913 100644 --- a/Zend/zend_ini.h +++ b/Zend/zend_ini.h @@ -19,6 +19,7 @@ #ifndef ZEND_INI_H #define ZEND_INI_H +#include "zend_modules.h" #include "zend_result.h" #define ZEND_INI_USER (1<<0) @@ -30,6 +31,8 @@ #define ZEND_INI_MH(name) int name(zend_ini_entry *entry, zend_string *new_value, void *mh_arg1, void *mh_arg2, void *mh_arg3, int stage) #define ZEND_INI_DISP(name) ZEND_COLD void name(zend_ini_entry *ini_entry, int type) +typedef struct _zend_ini_entry zend_ini_entry; + typedef struct _zend_ini_entry_def { const char *name; ZEND_INI_MH((*on_modify)); diff --git a/Zend/zend_language_scanner.h b/Zend/zend_language_scanner.h index ca32329a557f2..cd62be581986a 100644 --- a/Zend/zend_language_scanner.h +++ b/Zend/zend_language_scanner.h @@ -20,6 +20,11 @@ #ifndef ZEND_SCANNER_H #define ZEND_SCANNER_H +#include "zend_stack.h" +#include "zend_ptr_stack.h" +#include "zend_multibyte.h" +#include "zend_globals.h" + typedef struct _zend_lex_state { unsigned int yy_leng; unsigned char *yy_start; diff --git a/Zend/zend_multibyte.c b/Zend/zend_multibyte.c index f8dab668751a1..343df88d8e81d 100644 --- a/Zend/zend_multibyte.c +++ b/Zend/zend_multibyte.c @@ -22,6 +22,7 @@ #include "zend_operators.h" #include "zend_multibyte.h" #include "zend_ini.h" +#include "zend_globals.h" static const zend_encoding *dummy_encoding_fetcher(const char *encoding_name) { diff --git a/Zend/zend_stream.c b/Zend/zend_stream.c index 8e11841ad2658..2a1848a5df321 100644 --- a/Zend/zend_stream.c +++ b/Zend/zend_stream.c @@ -22,6 +22,7 @@ #include "zend.h" #include "zend_compile.h" #include "zend_stream.h" +#include "zend_globals.h" ZEND_DLIMPORT int isatty(int fd); diff --git a/ext/opcache/ZendAccelerator.h b/ext/opcache/ZendAccelerator.h index 6270492613a2d..aaa03579ea0d5 100644 --- a/ext/opcache/ZendAccelerator.h +++ b/ext/opcache/ZendAccelerator.h @@ -50,6 +50,8 @@ #include "zend_extensions.h" #include "zend_compile.h" +#include "zend_types.h" +#include "zend_modules.h" #include "Optimizer/zend_optimizer.h" #include "zend_accelerator_hash.h" diff --git a/ext/opcache/jit/zend_jit.c b/ext/opcache/jit/zend_jit.c index 2cc983fa439ca..18da24d0db84a 100644 --- a/ext/opcache/jit/zend_jit.c +++ b/ext/opcache/jit/zend_jit.c @@ -33,7 +33,6 @@ #ifdef HAVE_JIT -#include "Optimizer/zend_func_info.h" #include "Optimizer/zend_ssa.h" #include "Optimizer/zend_inference.h" #include "Optimizer/zend_call_graph.h" diff --git a/ext/opcache/jit/zend_jit_vm_helpers.c b/ext/opcache/jit/zend_jit_vm_helpers.c index 8e02fbbbfeac2..70dabde4a95e6 100644 --- a/ext/opcache/jit/zend_jit_vm_helpers.c +++ b/ext/opcache/jit/zend_jit_vm_helpers.c @@ -25,7 +25,6 @@ #include "Zend/zend_API.h" #include -#include "Optimizer/zend_func_info.h" #include "Optimizer/zend_call_graph.h" #include "zend_jit.h" #if ZEND_JIT_TARGET_X86 diff --git a/ext/opcache/zend_persist.c b/ext/opcache/zend_persist.c index 9698d584e80db..a0c90b656c594 100644 --- a/ext/opcache/zend_persist.c +++ b/ext/opcache/zend_persist.c @@ -31,7 +31,7 @@ #include "zend_attributes.h" #ifdef HAVE_JIT -# include "Optimizer/zend_func_info.h" +# include "Optimizer/zend_call_graph.h" # include "jit/zend_jit.h" #endif