/* Output all variables enqueued to be assembled. */ bool varpool_output_variables (void) { bool changed = false; varpool_node *node; if (seen_error ()) return false; varpool_remove_unreferenced_decls (); timevar_push (TV_VAROUT); FOR_EACH_DEFINED_VARIABLE (node) varpool_finalize_named_section_flags (node); FOR_EACH_DEFINED_VARIABLE (node) if (varpool_assemble_decl (node)) changed = true; timevar_pop (TV_VAROUT); return changed; }
/* Output all variables enqueued to be assembled. */ bool varpool_assemble_pending_decls (void) { bool changed = false; struct varpool_node *node; if (seen_error ()) return false; timevar_push (TV_VAROUT); /* EH might mark decls as needed during expansion. This should be safe since we don't create references to new function, but it should not be used elsewhere. */ varpool_analyze_pending_decls (); FOR_EACH_DEFINED_VARIABLE (node) varpool_finalize_named_section_flags (node); while (varpool_nodes_queue) { struct varpool_node *node = varpool_nodes_queue; x_varpool_nodes_queue = (symtab_node)(varpool_nodes_queue->next_needed); if (varpool_assemble_decl (node)) changed = true; else { node->prev_needed = NULL; node->next_needed = NULL; } } /* varpool_nodes_queue is now empty, clear the pointer to the last element in the queue. */ x_varpool_last_needed_node = NULL; timevar_pop (TV_VAROUT); return changed; }