From 779c0390e3b57d1eebd41bbfe43d1f329c91de6c Mon Sep 17 00:00:00 2001 From: David Malcolm Date: Wed, 23 Oct 2024 14:26:38 -0400 Subject: [PATCH] jit: reset state in varasm.cc [PR117275] PR jit/117275 reports various jit test failures seen on powerpc64le-unknown-linux-gnu due to hitting this assertion in varasm.cc on the 2nd compilation in a process: #2 0x00007ffff63e67d0 in assemble_external_libcall (fun=0x7ffff2a4b1d8) at ../../src/gcc/varasm.cc:2650 2650 gcc_assert (!pending_assemble_externals_processed); (gdb) p pending_assemble_externals_processed $1 = true We're not properly resetting state in varasm.cc after a compile for libgccjit. Fixed thusly. gcc/ChangeLog: PR jit/117275 * toplev.cc (toplev::finalize): Call varasm_cc_finalize. * varasm.cc (varasm_cc_finalize): New. * varasm.h (varasm_cc_finalize): New decl. Signed-off-by: David Malcolm --- gcc/toplev.cc | 1 + gcc/varasm.cc | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++ gcc/varasm.h | 2 ++ 3 files changed, 56 insertions(+) diff --git a/gcc/toplev.cc b/gcc/toplev.cc index 5df59b79c8031..62034c32b4aff 100644 --- a/gcc/toplev.cc +++ b/gcc/toplev.cc @@ -2433,6 +2433,7 @@ toplev::finalize (void) ira_costs_cc_finalize (); tree_cc_finalize (); reginfo_cc_finalize (); + varasm_cc_finalize (); /* save_decoded_options uses opts_obstack, so these must be cleaned up together. */ diff --git a/gcc/varasm.cc b/gcc/varasm.cc index 8e492e37fb087..c254005542164 100644 --- a/gcc/varasm.cc +++ b/gcc/varasm.cc @@ -8854,4 +8854,57 @@ handle_vtv_comdat_section (section *sect, const_tree decl ATTRIBUTE_UNUSED) switch_to_comdat_section(sect, DECL_NAME (decl)); } +void +varasm_cc_finalize () +{ + first_global_object_name = nullptr; + weak_global_object_name = nullptr; + + const_labelno = 0; + size_directive_output = 0; + + last_assemble_variable_decl = NULL_TREE; + first_function_block_is_cold = false; + saw_no_split_stack = false; + text_section = nullptr; + data_section = nullptr; + readonly_data_section = nullptr; + sdata_section = nullptr; + ctors_section = nullptr; + dtors_section = nullptr; + bss_section = nullptr; + sbss_section = nullptr; + tls_comm_section = nullptr; + comm_section = nullptr; + lcomm_section = nullptr; + bss_noswitch_section = nullptr; + exception_section = nullptr; + eh_frame_section = nullptr; + in_section = nullptr; + in_cold_section_p = false; + cold_function_name = NULL_TREE; + unnamed_sections = nullptr; + section_htab = nullptr; + object_block_htab = nullptr; + anchor_labelno = 0; + shared_constant_pool = nullptr; + pending_assemble_externals = NULL_TREE; + pending_libcall_symbols = nullptr; + +#ifdef ASM_OUTPUT_EXTERNAL + pending_assemble_externals_processed = false; + pending_assemble_externals_set = nullptr; +#endif + + weak_decls = NULL_TREE; + initial_trampoline = nullptr; + const_desc_htab = nullptr; + weakref_targets = NULL_TREE; + alias_pairs = nullptr; + tm_clone_hash = nullptr; + trampolines_created = 0; + elf_init_array_section = nullptr; + elf_fini_array_section = nullptr; +} + #include "gt-varasm.h" diff --git a/gcc/varasm.h b/gcc/varasm.h index d9311dc370bbf..f00ac7f3e5c99 100644 --- a/gcc/varasm.h +++ b/gcc/varasm.h @@ -81,4 +81,6 @@ extern rtx assemble_trampoline_template (void); extern void switch_to_comdat_section (section *, tree); +extern void varasm_cc_finalize (); + #endif // GCC_VARASM_H