https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107411
--- Comment #10 from qinzhao at gcc dot gnu.org --- the following patch fixed this issue: diff --git a/gcc/tree-ssa-uninit.cc b/gcc/tree-ssa-uninit.cc index c555cf5cd50..eca727b010a 100644 --- a/gcc/tree-ssa-uninit.cc +++ b/gcc/tree-ssa-uninit.cc @@ -113,6 +113,18 @@ uninit_undefined_value_p (tree t) return !get_no_uninit_warning (SSA_NAME_VAR (t)); } + +/* Get the name string for the VAR that defined with a call to .DEFERRED_INIT. + * Refer to routine gimple_add_init_for_auto_var. */ +static const char * +get_var_name (tree var) +{ + const char *var_name_str + = DECL_NAME (var) ? IDENTIFIER_POINTER (DECL_NAME (var)) + : xasprintf ("D.%u", DECL_UID (var)); + return var_name_str; +} + /* Emit warnings for uninitialized variables. This is done in two passes. The first pass notices real uses of SSA names with undefined values. @@ -224,8 +236,6 @@ warn_uninit (opt_code opt, tree t, tree var, gimple *context, at alt_reloc = temp. */ tree lhs_var = NULL_TREE; - tree lhs_var_name = NULL_TREE; - const char *lhs_var_name_str = NULL; /* Get the variable name from the 3rd argument of call. */ tree var_name = gimple_call_arg (var_def_stmt, 2); @@ -239,11 +249,12 @@ warn_uninit (opt_code opt, tree t, tree var, gimple *context, else if (TREE_CODE (gimple_assign_lhs (context)) == SSA_NAME) lhs_var = SSA_NAME_VAR (gimple_assign_lhs (context)); } - if (lhs_var - && (lhs_var_name = DECL_NAME (lhs_var)) - && (lhs_var_name_str = IDENTIFIER_POINTER (lhs_var_name)) - && (strcmp (lhs_var_name_str, var_name_str) == 0)) - return; + if (lhs_var) + { + const char *lhs_var_name_str = get_var_name (lhs_var); + if (strcmp (lhs_var_name_str, var_name_str) == 0) + return; + } gcc_assert (var_name_str && var_def_stmt); } }