Hi, enabling inlining triggered lifetime-dse issue with symbol_table constructor.
Bootstrapped/regtested x86_64-linux * cgraph.c (symbol_table_test::symbol_table_test): Use ggc_alloc rather than ggc_alloc_cleared to alloc symbol table. * toplev.c (general_init): Likewise. * cgraph.h (symbol_table): Explicitly construct every field. Index: cgraph.c =================================================================== --- cgraph.c (revision 276707) +++ cgraph.c (working copy) @@ -3835,7 +3832,7 @@ symbol_table_test::symbol_table_test () { gcc_assert (saved_symtab == NULL); saved_symtab = symtab; - symtab = new (ggc_cleared_alloc <symbol_table> ()) symbol_table (); + symtab = new (ggc_alloc <symbol_table> ()) symbol_table (); } /* Destructor. Restore the old value of symtab. */ Index: toplev.c =================================================================== --- toplev.c (revision 276707) +++ toplev.c (working copy) @@ -1170,7 +1170,7 @@ general_init (const char *argv0, bool in /* Create the passes. */ g->set_passes (new gcc::pass_manager (g)); - symtab = new (ggc_cleared_alloc <symbol_table> ()) symbol_table (); + symtab = new (ggc_alloc <symbol_table> ()) symbol_table (); statistics_early_init (); debuginfo_early_init (); Index: cgraph.h =================================================================== --- cgraph.h (revision 276707) +++ cgraph.h (working copy) @@ -2095,9 +2095,19 @@ public: friend struct cgraph_node; friend struct cgraph_edge; - symbol_table (): cgraph_max_uid (1), cgraph_max_summary_id (0), - edges_max_uid (1), edges_max_summary_id (0), - cgraph_released_summary_ids (), edge_released_summary_ids () + symbol_table (): + cgraph_count (0), cgraph_max_uid (1), cgraph_max_summary_id (0), + edges_count (0), edges_max_uid (1), edges_max_summary_id (0), + cgraph_released_summary_ids (), edge_released_summary_ids (), + nodes (NULL), asmnodes (NULL), asm_last_node (NULL), + order (0), global_info_ready (false), state (PARSING), + function_flags_ready (false), cpp_implicit_aliases_done (false), + section_hash (NULL), assembler_name_hash (NULL), init_priority_hash (NULL), + dump_file (NULL), ipa_clones_dump_file (NULL), cloned_nodes (), + m_first_edge_removal_hook (NULL), m_first_cgraph_removal_hook (NULL), + m_first_edge_duplicated_hook (NULL), m_first_cgraph_duplicated_hook (NULL), + m_first_cgraph_insertion_hook (NULL), m_first_varpool_insertion_hook (NULL), + m_first_varpool_removal_hook (NULL) { } @@ -2343,6 +2353,9 @@ public: /* Vector of released summary IDS for cgraph nodes. */ vec<int> GTY ((skip)) edge_released_summary_ids; + /* Return symbol used to separate symbol name from suffix. */ + static char symbol_suffix_separator (); + symtab_node* GTY(()) nodes; asm_node* GTY(()) asmnodes; asm_node* GTY(()) asm_last_node; @@ -2372,9 +2385,6 @@ public: FILE* GTY ((skip)) dump_file; - /* Return symbol used to separate symbol name from suffix. */ - static char symbol_suffix_separator (); - FILE* GTY ((skip)) ipa_clones_dump_file; hash_set <const cgraph_node *> GTY ((skip)) cloned_nodes;