https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103899
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jakub at gcc dot gnu.org --- Comment #6 from Jakub Jelinek <jakub at gcc dot gnu.org> --- While we should fix uninit warning to deal with this if possible, I think we should also try to work around this in expr.c. If following works, then I think it would be even a cleanup (as it moves the context variable declaration to the sole spot where it is used): --- gcc/expr.c.jj 2022-01-03 10:40:41.203164211 +0100 +++ gcc/expr.c 2022-01-05 14:47:47.684660031 +0100 @@ -10340,7 +10340,6 @@ expand_expr_real_1 (tree exp, rtx target enum tree_code code = TREE_CODE (exp); rtx subtarget, original_target; int ignore; - tree context; bool reduce_bit_field; location_t loc = EXPR_LOCATION (exp); struct separate_ops ops; @@ -10579,14 +10578,16 @@ expand_expr_real_1 (tree exp, rtx target /* Variables inherited from containing functions should have been lowered by this point. */ if (exp) - context = decl_function_context (exp); - gcc_assert (!exp - || SCOPE_FILE_SCOPE_P (context) - || context == current_function_decl - || TREE_STATIC (exp) - || DECL_EXTERNAL (exp) - /* ??? C++ creates functions that are not TREE_STATIC. */ - || TREE_CODE (exp) == FUNCTION_DECL); + { + tree context = decl_function_context (exp); + gcc_assert (SCOPE_FILE_SCOPE_P (context) + || context == current_function_decl + || TREE_STATIC (exp) + || DECL_EXTERNAL (exp) + /* ??? C++ creates functions that are not + TREE_STATIC. */ + || TREE_CODE (exp) == FUNCTION_DECL); + } /* This is the case of an array whose size is to be determined from its initializer, while the initializer is still being parsed.