This removes one odd piece in add_local_variables: FOR_EACH_LOCAL_DECL (callee, ix, var) - if (TREE_STATIC (var) && !TREE_ASM_WRITTEN (var)) - { - if (!check_var_ann - || (var_ann (var) && add_referenced_var (var))) - add_local_decl (caller, var); - } - else if (!can_be_nonlocal (var, id))
now that we only have a var-ann if a var is in referenced vars but no TREE_STATIC vars are in referenced vars the check_var_ann == true path is never reached. The caller with check_var_ann == false is tree_function_versioning and I don't understand why it should specifically care about !TREE_ASM_WRITTEN. We don't have a testcase that breaks, so the following patch simply removes the code. Bootstrapped and tested on x86_64-unknown-linux-gnu, applied. Richard. 2012-07-20 Richard Guenther <rguent...@suse.de> * tree-inline.c (add_local_variables): Remove check_var_ann parameter and dead code. (expand_call_inline): Adjust. (tree_function_versioning): Likewise. Index: gcc/tree-inline.c =================================================================== --- gcc/tree-inline.c (revision 189656) +++ gcc/tree-inline.c (working copy) @@ -3781,19 +3755,13 @@ prepend_lexical_block (tree current_bloc static inline void add_local_variables (struct function *callee, struct function *caller, - copy_body_data *id, bool check_var_ann) + copy_body_data *id) { tree var; unsigned ix; FOR_EACH_LOCAL_DECL (callee, ix, var) - if (TREE_STATIC (var) && !TREE_ASM_WRITTEN (var)) - { - if (!check_var_ann - || (var_ann (var) && add_referenced_var (var))) - add_local_decl (caller, var); - } - else if (!can_be_nonlocal (var, id)) + if (!can_be_nonlocal (var, id)) { tree new_var = remap_decl (var, id); @@ -4027,7 +3995,7 @@ expand_call_inline (basic_block bb, gimp use_retvar = declare_return_variable (id, return_slot, modify_dest, bb); /* Add local vars in this inlined callee to caller. */ - add_local_variables (id->src_cfun, cfun, id, true); + add_local_variables (id->src_cfun, cfun, id); if (dump_file && (dump_flags & TDF_DETAILS)) { @@ -5255,7 +5215,7 @@ tree_function_versioning (tree old_decl, if (!VEC_empty (tree, DECL_STRUCT_FUNCTION (old_decl)->local_decls)) /* Add local vars. */ - add_local_variables (DECL_STRUCT_FUNCTION (old_decl), cfun, &id, false); + add_local_variables (DECL_STRUCT_FUNCTION (old_decl), cfun, &id); if (DECL_RESULT (old_decl) == NULL_TREE) ;