/* Type information for GCC.
   Copyright (C) 2004, 2007, 2009 Free Software Foundation, Inc.

This file is part of GCC.

GCC is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
Software Foundation; either version 3, or (at your option) any later
version.

GCC is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
for more details.

You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING3.  If not see
<http://www.gnu.org/licenses/>.  */

/* This file is machine generated.  Do not edit.  */

/* Dynamic enumeration of plugin types.  */
#ifdef GCC_PLUGIN_HAVE_PCH
static int gccplugin_type_base;
#define gt_ggc_e_13tree_llvm_map ((gccplugin_type_base>0)?(gccplugin_type_base+0):0)
#define gt_e_P13tree_llvm_map4htab ((gccplugin_type_base>0)?(gccplugin_type_base+1):0)

#define GCCPLUGIN_TYPE_COUNT 2
/* end ifdef GCC_PLUGIN_HAVE_PCH */
#endif

/* GC marker procedures.  */
#define gt_ggc_m_13tree_llvm_map(X) do { \
  if (X != NULL) gt_ggc_mx_tree_llvm_map (X);\
  } while (0)
extern void gt_ggc_mx_tree_llvm_map (void *);
#define gt_ggc_m_15interface_tuple(X) do { \
  if (X != NULL) gt_ggc_mx_interface_tuple (X);\
  } while (0)
extern void gt_ggc_mx_interface_tuple (void *);
#define gt_ggc_m_16volatilized_type(X) do { \
  if (X != NULL) gt_ggc_mx_volatilized_type (X);\
  } while (0)
extern void gt_ggc_mx_volatilized_type (void *);
#define gt_ggc_m_17string_descriptor(X) do { \
  if (X != NULL) gt_ggc_mx_string_descriptor (X);\
  } while (0)
extern void gt_ggc_mx_string_descriptor (void *);
#define gt_ggc_m_15c_inline_static(X) do { \
  if (X != NULL) gt_ggc_mx_c_inline_static (X);\
  } while (0)
extern void gt_ggc_mx_c_inline_static (void *);
#define gt_ggc_m_24VEC_c_goto_bindings_p_gc(X) do { \
  if (X != NULL) gt_ggc_mx_VEC_c_goto_bindings_p_gc (X);\
  } while (0)
extern void gt_ggc_mx_VEC_c_goto_bindings_p_gc (void *);
#define gt_ggc_m_15c_goto_bindings(X) do { \
  if (X != NULL) gt_ggc_mx_c_goto_bindings (X);\
  } while (0)
extern void gt_ggc_mx_c_goto_bindings (void *);
#define gt_ggc_m_7c_scope(X) do { \
  if (X != NULL) gt_ggc_mx_c_scope (X);\
  } while (0)
extern void gt_ggc_mx_c_scope (void *);
#define gt_ggc_m_9c_binding(X) do { \
  if (X != NULL) gt_ggc_mx_c_binding (X);\
  } while (0)
extern void gt_ggc_mx_c_binding (void *);
#define gt_ggc_m_12c_label_vars(X) do { \
  if (X != NULL) gt_ggc_mx_c_label_vars (X);\
  } while (0)
extern void gt_ggc_mx_c_label_vars (void *);
#define gt_ggc_m_8c_parser(X) do { \
  if (X != NULL) gt_ggc_mx_c_parser (X);\
  } while (0)
extern void gt_ggc_mx_c_parser (void *);
#define gt_ggc_m_9imp_entry(X) do { \
  if (X != NULL) gt_ggc_mx_imp_entry (X);\
  } while (0)
extern void gt_ggc_mx_imp_entry (void *);
#define gt_ggc_m_16hashed_attribute(X) do { \
  if (X != NULL) gt_ggc_mx_hashed_attribute (X);\
  } while (0)
extern void gt_ggc_mx_hashed_attribute (void *);
#define gt_ggc_m_12hashed_entry(X) do { \
  if (X != NULL) gt_ggc_mx_hashed_entry (X);\
  } while (0)
extern void gt_ggc_mx_hashed_entry (void *);
#define gt_ggc_m_14type_assertion(X) do { \
  if (X != NULL) gt_ggc_mx_type_assertion (X);\
  } while (0)
extern void gt_ggc_mx_type_assertion (void *);
#define gt_ggc_m_18treetreehash_entry(X) do { \
  if (X != NULL) gt_ggc_mx_treetreehash_entry (X);\
  } while (0)
extern void gt_ggc_mx_treetreehash_entry (void *);
#define gt_ggc_m_5CPool(X) do { \
  if (X != NULL) gt_ggc_mx_CPool (X);\
  } while (0)
extern void gt_ggc_mx_CPool (void *);
#define gt_ggc_m_3JCF(X) do { \
  if (X != NULL) gt_ggc_mx_JCF (X);\
  } while (0)
extern void gt_ggc_mx_JCF (void *);
#define gt_ggc_m_17module_htab_entry(X) do { \
  if (X != NULL) gt_ggc_mx_module_htab_entry (X);\
  } while (0)
extern void gt_ggc_mx_module_htab_entry (void *);
#define gt_ggc_m_13binding_level(X) do { \
  if (X != NULL) gt_ggc_mx_binding_level (X);\
  } while (0)
extern void gt_ggc_mx_binding_level (void *);
#define gt_ggc_m_9opt_stack(X) do { \
  if (X != NULL) gt_ggc_mx_opt_stack (X);\
  } while (0)
extern void gt_ggc_mx_opt_stack (void *);
#define gt_ggc_m_16def_pragma_macro(X) do { \
  if (X != NULL) gt_ggc_mx_def_pragma_macro (X);\
  } while (0)
extern void gt_ggc_mx_def_pragma_macro (void *);
#define gt_ggc_m_22def_pragma_macro_value(X) do { \
  if (X != NULL) gt_ggc_mx_def_pragma_macro_value (X);\
  } while (0)
extern void gt_ggc_mx_def_pragma_macro_value (void *);
#define gt_ggc_m_11align_stack(X) do { \
  if (X != NULL) gt_ggc_mx_align_stack (X);\
  } while (0)
extern void gt_ggc_mx_align_stack (void *);
#define gt_ggc_m_18VEC_tree_gc_vec_gc(X) do { \
  if (X != NULL) gt_ggc_mx_VEC_tree_gc_vec_gc (X);\
  } while (0)
extern void gt_ggc_mx_VEC_tree_gc_vec_gc (void *);
#define gt_ggc_m_19VEC_const_char_p_gc(X) do { \
  if (X != NULL) gt_ggc_mx_VEC_const_char_p_gc (X);\
  } while (0)
extern void gt_ggc_mx_VEC_const_char_p_gc (void *);
#define gt_ggc_m_21pending_abstract_type(X) do { \
  if (X != NULL) gt_ggc_mx_pending_abstract_type (X);\
  } while (0)
extern void gt_ggc_mx_pending_abstract_type (void *);
#define gt_ggc_m_9cp_parser(X) do { \
  if (X != NULL) gt_ggc_mx_cp_parser (X);\
  } while (0)
extern void gt_ggc_mx_cp_parser (void *);
#define gt_ggc_m_17cp_parser_context(X) do { \
  if (X != NULL) gt_ggc_mx_cp_parser_context (X);\
  } while (0)
extern void gt_ggc_mx_cp_parser_context (void *);
#define gt_ggc_m_8cp_lexer(X) do { \
  if (X != NULL) gt_ggc_mx_cp_lexer (X);\
  } while (0)
extern void gt_ggc_mx_cp_lexer (void *);
#define gt_ggc_m_10tree_check(X) do { \
  if (X != NULL) gt_ggc_mx_tree_check (X);\
  } while (0)
extern void gt_ggc_mx_tree_check (void *);
#define gt_ggc_m_22VEC_deferred_access_gc(X) do { \
  if (X != NULL) gt_ggc_mx_VEC_deferred_access_gc (X);\
  } while (0)
extern void gt_ggc_mx_VEC_deferred_access_gc (void *);
#define gt_ggc_m_10spec_entry(X) do { \
  if (X != NULL) gt_ggc_mx_spec_entry (X);\
  } while (0)
extern void gt_ggc_mx_spec_entry (void *);
#define gt_ggc_m_16pending_template(X) do { \
  if (X != NULL) gt_ggc_mx_pending_template (X);\
  } while (0)
extern void gt_ggc_mx_pending_template (void *);
#define gt_ggc_m_21named_label_use_entry(X) do { \
  if (X != NULL) gt_ggc_mx_named_label_use_entry (X);\
  } while (0)
extern void gt_ggc_mx_named_label_use_entry (void *);
#define gt_ggc_m_28VEC_deferred_access_check_gc(X) do { \
  if (X != NULL) gt_ggc_mx_VEC_deferred_access_check_gc (X);\
  } while (0)
extern void gt_ggc_mx_VEC_deferred_access_check_gc (void *);
#define gt_ggc_m_11tinst_level(X) do { \
  if (X != NULL) gt_ggc_mx_tinst_level (X);\
  } while (0)
extern void gt_ggc_mx_tinst_level (void *);
#define gt_ggc_m_18sorted_fields_type(X) do { \
  if (X != NULL) gt_ggc_mx_sorted_fields_type (X);\
  } while (0)
extern void gt_ggc_mx_sorted_fields_type (void *);
#define gt_ggc_m_18VEC_tree_pair_s_gc(X) do { \
  if (X != NULL) gt_ggc_mx_VEC_tree_pair_s_gc (X);\
  } while (0)
extern void gt_ggc_mx_VEC_tree_pair_s_gc (void *);
#define gt_ggc_m_17named_label_entry(X) do { \
  if (X != NULL) gt_ggc_mx_named_label_entry (X);\
  } while (0)
extern void gt_ggc_mx_named_label_entry (void *);
#define gt_ggc_m_14cp_token_cache(X) do { \
  if (X != NULL) gt_ggc_mx_cp_token_cache (X);\
  } while (0)
extern void gt_ggc_mx_cp_token_cache (void *);
#define gt_ggc_m_11saved_scope(X) do { \
  if (X != NULL) gt_ggc_mx_saved_scope (X);\
  } while (0)
extern void gt_ggc_mx_saved_scope (void *);
#define gt_ggc_m_16cxx_int_tree_map(X) do { \
  if (X != NULL) gt_ggc_mx_cxx_int_tree_map (X);\
  } while (0)
extern void gt_ggc_mx_cxx_int_tree_map (void *);
#define gt_ggc_m_23VEC_cp_class_binding_gc(X) do { \
  if (X != NULL) gt_ggc_mx_VEC_cp_class_binding_gc (X);\
  } while (0)
extern void gt_ggc_mx_VEC_cp_class_binding_gc (void *);
#define gt_ggc_m_24VEC_cxx_saved_binding_gc(X) do { \
  if (X != NULL) gt_ggc_mx_VEC_cxx_saved_binding_gc (X);\
  } while (0)
extern void gt_ggc_mx_VEC_cxx_saved_binding_gc (void *);
#define gt_ggc_m_16cp_binding_level(X) do { \
  if (X != NULL) gt_ggc_mx_cp_binding_level (X);\
  } while (0)
extern void gt_ggc_mx_cp_binding_level (void *);
#define gt_ggc_m_11cxx_binding(X) do { \
  if (X != NULL) gt_ggc_mx_cxx_binding (X);\
  } while (0)
extern void gt_ggc_mx_cxx_binding (void *);
#define gt_ggc_m_15binding_entry_s(X) do { \
  if (X != NULL) gt_ggc_mx_binding_entry_s (X);\
  } while (0)
extern void gt_ggc_mx_binding_entry_s (void *);
#define gt_ggc_m_15binding_table_s(X) do { \
  if (X != NULL) gt_ggc_mx_binding_table_s (X);\
  } while (0)
extern void gt_ggc_mx_binding_table_s (void *);
#define gt_ggc_m_14VEC_tinfo_s_gc(X) do { \
  if (X != NULL) gt_ggc_mx_VEC_tinfo_s_gc (X);\
  } while (0)
extern void gt_ggc_mx_VEC_tinfo_s_gc (void *);
#define gt_ggc_m_18gnat_binding_level(X) do { \
  if (X != NULL) gt_ggc_mx_gnat_binding_level (X);\
  } while (0)
extern void gt_ggc_mx_gnat_binding_level (void *);
#define gt_ggc_m_9elab_info(X) do { \
  if (X != NULL) gt_ggc_mx_elab_info (X);\
  } while (0)
extern void gt_ggc_mx_elab_info (void *);
#define gt_ggc_m_10stmt_group(X) do { \
  if (X != NULL) gt_ggc_mx_stmt_group (X);\
  } while (0)
extern void gt_ggc_mx_stmt_group (void *);
#define gt_ggc_m_16VEC_parm_attr_gc(X) do { \
  if (X != NULL) gt_ggc_mx_VEC_parm_attr_gc (X);\
  } while (0)
extern void gt_ggc_mx_VEC_parm_attr_gc (void *);
#define gt_ggc_m_11parm_attr_d(X) do { \
  if (X != NULL) gt_ggc_mx_parm_attr_d (X);\
  } while (0)
extern void gt_ggc_mx_parm_attr_d (void *);
#define gt_ggc_m_19lto_symtab_decl_def(X) do { \
  if (X != NULL) gt_ggc_mx_lto_symtab_decl_def (X);\
  } while (0)
extern void gt_ggc_mx_lto_symtab_decl_def (void *);
#define gt_ggc_m_25lto_symtab_identifier_def(X) do { \
  if (X != NULL) gt_ggc_mx_lto_symtab_identifier_def (X);\
  } while (0)
extern void gt_ggc_mx_lto_symtab_identifier_def (void *);
#define gt_ggc_m_20ssa_operand_memory_d(X) do { \
  if (X != NULL) gt_ggc_mx_ssa_operand_memory_d (X);\
  } while (0)
extern void gt_ggc_mx_ssa_operand_memory_d (void *);
#define gt_ggc_m_13scev_info_str(X) do { \
  if (X != NULL) gt_ggc_mx_scev_info_str (X);\
  } while (0)
extern void gt_ggc_mx_scev_info_str (void *);
#define gt_ggc_m_13VEC_gimple_gc(X) do { \
  if (X != NULL) gt_ggc_mx_VEC_gimple_gc (X);\
  } while (0)
extern void gt_ggc_mx_VEC_gimple_gc (void *);
#define gt_ggc_m_9type_hash(X) do { \
  if (X != NULL) gt_ggc_mx_type_hash (X);\
  } while (0)
extern void gt_ggc_mx_type_hash (void *);
#define gt_ggc_m_16string_pool_data(X) do { \
  if (X != NULL) gt_ggc_mx_string_pool_data (X);\
  } while (0)
extern void gt_ggc_mx_string_pool_data (void *);
#define gt_ggc_m_13libfunc_entry(X) do { \
  if (X != NULL) gt_ggc_mx_libfunc_entry (X);\
  } while (0)
extern void gt_ggc_mx_libfunc_entry (void *);
#define gt_ggc_m_23temp_slot_address_entry(X) do { \
  if (X != NULL) gt_ggc_mx_temp_slot_address_entry (X);\
  } while (0)
extern void gt_ggc_mx_temp_slot_address_entry (void *);
#define gt_ggc_m_15throw_stmt_node(X) do { \
  if (X != NULL) gt_ggc_mx_throw_stmt_node (X);\
  } while (0)
extern void gt_ggc_mx_throw_stmt_node (void *);
#define gt_ggc_m_16VEC_eh_region_gc(X) do { \
  if (X != NULL) gt_ggc_mx_VEC_eh_region_gc (X);\
  } while (0)
extern void gt_ggc_mx_VEC_eh_region_gc (void *);
#define gt_ggc_m_11eh_region_d(X) do { \
  if (X != NULL) gt_ggc_mx_eh_region_d (X);\
  } while (0)
extern void gt_ggc_mx_eh_region_d (void *);
#define gt_ggc_m_16var_loc_list_def(X) do { \
  if (X != NULL) gt_ggc_mx_var_loc_list_def (X);\
  } while (0)
extern void gt_ggc_mx_var_loc_list_def (void *);
#define gt_ggc_m_12var_loc_node(X) do { \
  if (X != NULL) gt_ggc_mx_var_loc_node (X);\
  } while (0)
extern void gt_ggc_mx_var_loc_node (void *);
#define gt_ggc_m_20VEC_die_arg_entry_gc(X) do { \
  if (X != NULL) gt_ggc_mx_VEC_die_arg_entry_gc (X);\
  } while (0)
extern void gt_ggc_mx_VEC_die_arg_entry_gc (void *);
#define gt_ggc_m_16limbo_die_struct(X) do { \
  if (X != NULL) gt_ggc_mx_limbo_die_struct (X);\
  } while (0)
extern void gt_ggc_mx_limbo_die_struct (void *);
#define gt_ggc_m_20VEC_pubname_entry_gc(X) do { \
  if (X != NULL) gt_ggc_mx_VEC_pubname_entry_gc (X);\
  } while (0)
extern void gt_ggc_mx_VEC_pubname_entry_gc (void *);
#define gt_ggc_m_19VEC_dw_attr_node_gc(X) do { \
  if (X != NULL) gt_ggc_mx_VEC_dw_attr_node_gc (X);\
  } while (0)
extern void gt_ggc_mx_VEC_dw_attr_node_gc (void *);
#define gt_ggc_m_25dw_ranges_by_label_struct(X) do { \
  if (X != NULL) gt_ggc_mx_dw_ranges_by_label_struct (X);\
  } while (0)
extern void gt_ggc_mx_dw_ranges_by_label_struct (void *);
#define gt_ggc_m_16dw_ranges_struct(X) do { \
  if (X != NULL) gt_ggc_mx_dw_ranges_struct (X);\
  } while (0)
extern void gt_ggc_mx_dw_ranges_struct (void *);
#define gt_ggc_m_28dw_separate_line_info_struct(X) do { \
  if (X != NULL) gt_ggc_mx_dw_separate_line_info_struct (X);\
  } while (0)
extern void gt_ggc_mx_dw_separate_line_info_struct (void *);
#define gt_ggc_m_19dw_line_info_struct(X) do { \
  if (X != NULL) gt_ggc_mx_dw_line_info_struct (X);\
  } while (0)
extern void gt_ggc_mx_dw_line_info_struct (void *);
#define gt_ggc_m_25VEC_deferred_locations_gc(X) do { \
  if (X != NULL) gt_ggc_mx_VEC_deferred_locations_gc (X);\
  } while (0)
extern void gt_ggc_mx_VEC_deferred_locations_gc (void *);
#define gt_ggc_m_18dw_loc_list_struct(X) do { \
  if (X != NULL) gt_ggc_mx_dw_loc_list_struct (X);\
  } while (0)
extern void gt_ggc_mx_dw_loc_list_struct (void *);
#define gt_ggc_m_15dwarf_file_data(X) do { \
  if (X != NULL) gt_ggc_mx_dwarf_file_data (X);\
  } while (0)
extern void gt_ggc_mx_dwarf_file_data (void *);
#define gt_ggc_m_15queued_reg_save(X) do { \
  if (X != NULL) gt_ggc_mx_queued_reg_save (X);\
  } while (0)
extern void gt_ggc_mx_queued_reg_save (void *);
#define gt_ggc_m_20indirect_string_node(X) do { \
  if (X != NULL) gt_ggc_mx_indirect_string_node (X);\
  } while (0)
extern void gt_ggc_mx_indirect_string_node (void *);
#define gt_ggc_m_19dw_loc_descr_struct(X) do { \
  if (X != NULL) gt_ggc_mx_dw_loc_descr_struct (X);\
  } while (0)
extern void gt_ggc_mx_dw_loc_descr_struct (void *);
#define gt_ggc_m_13dw_fde_struct(X) do { \
  if (X != NULL) gt_ggc_mx_dw_fde_struct (X);\
  } while (0)
extern void gt_ggc_mx_dw_fde_struct (void *);
#define gt_ggc_m_13dw_cfi_struct(X) do { \
  if (X != NULL) gt_ggc_mx_dw_cfi_struct (X);\
  } while (0)
extern void gt_ggc_mx_dw_cfi_struct (void *);
#define gt_ggc_m_8typeinfo(X) do { \
  if (X != NULL) gt_ggc_mx_typeinfo (X);\
  } while (0)
extern void gt_ggc_mx_typeinfo (void *);
#define gt_ggc_m_22VEC_alias_set_entry_gc(X) do { \
  if (X != NULL) gt_ggc_mx_VEC_alias_set_entry_gc (X);\
  } while (0)
extern void gt_ggc_mx_VEC_alias_set_entry_gc (void *);
#define gt_ggc_m_17alias_set_entry_d(X) do { \
  if (X != NULL) gt_ggc_mx_alias_set_entry_d (X);\
  } while (0)
extern void gt_ggc_mx_alias_set_entry_d (void *);
#define gt_ggc_m_24constant_descriptor_tree(X) do { \
  if (X != NULL) gt_ggc_mx_constant_descriptor_tree (X);\
  } while (0)
extern void gt_ggc_mx_constant_descriptor_tree (void *);
#define gt_ggc_m_15cgraph_asm_node(X) do { \
  if (X != NULL) gt_ggc_mx_cgraph_asm_node (X);\
  } while (0)
extern void gt_ggc_mx_cgraph_asm_node (void *);
#define gt_ggc_m_12varpool_node(X) do { \
  if (X != NULL) gt_ggc_mx_varpool_node (X);\
  } while (0)
extern void gt_ggc_mx_varpool_node (void *);
#define gt_ggc_m_22VEC_cgraph_node_set_gc(X) do { \
  if (X != NULL) gt_ggc_mx_VEC_cgraph_node_set_gc (X);\
  } while (0)
extern void gt_ggc_mx_VEC_cgraph_node_set_gc (void *);
#define gt_ggc_m_19cgraph_node_set_def(X) do { \
  if (X != NULL) gt_ggc_mx_cgraph_node_set_def (X);\
  } while (0)
extern void gt_ggc_mx_cgraph_node_set_def (void *);
#define gt_ggc_m_27cgraph_node_set_element_def(X) do { \
  if (X != NULL) gt_ggc_mx_cgraph_node_set_element_def (X);\
  } while (0)
extern void gt_ggc_mx_cgraph_node_set_element_def (void *);
#define gt_ggc_m_22VEC_cgraph_node_ptr_gc(X) do { \
  if (X != NULL) gt_ggc_mx_VEC_cgraph_node_ptr_gc (X);\
  } while (0)
extern void gt_ggc_mx_VEC_cgraph_node_ptr_gc (void *);
#define gt_ggc_m_11cgraph_edge(X) do { \
  if (X != NULL) gt_ggc_mx_cgraph_edge (X);\
  } while (0)
extern void gt_ggc_mx_cgraph_edge (void *);
#define gt_ggc_m_24VEC_ipa_replace_map_p_gc(X) do { \
  if (X != NULL) gt_ggc_mx_VEC_ipa_replace_map_p_gc (X);\
  } while (0)
extern void gt_ggc_mx_VEC_ipa_replace_map_p_gc (void *);
#define gt_ggc_m_15ipa_replace_map(X) do { \
  if (X != NULL) gt_ggc_mx_ipa_replace_map (X);\
  } while (0)
extern void gt_ggc_mx_ipa_replace_map (void *);
#define gt_ggc_m_11cgraph_node(X) do { \
  if (X != NULL) gt_ggc_mx_cgraph_node (X);\
  } while (0)
extern void gt_ggc_mx_cgraph_node (void *);
#define gt_ggc_m_18VEC_basic_block_gc(X) do { \
  if (X != NULL) gt_ggc_mx_VEC_basic_block_gc (X);\
  } while (0)
extern void gt_ggc_mx_VEC_basic_block_gc (void *);
#define gt_ggc_m_14gimple_bb_info(X) do { \
  if (X != NULL) gt_ggc_mx_gimple_bb_info (X);\
  } while (0)
extern void gt_ggc_mx_gimple_bb_info (void *);
#define gt_ggc_m_11rtl_bb_info(X) do { \
  if (X != NULL) gt_ggc_mx_rtl_bb_info (X);\
  } while (0)
extern void gt_ggc_mx_rtl_bb_info (void *);
#define gt_ggc_m_11VEC_edge_gc(X) do { \
  if (X != NULL) gt_ggc_mx_VEC_edge_gc (X);\
  } while (0)
extern void gt_ggc_mx_VEC_edge_gc (void *);
#define gt_ggc_m_17cselib_val_struct(X) do { \
  if (X != NULL) gt_ggc_mx_cselib_val_struct (X);\
  } while (0)
extern void gt_ggc_mx_cselib_val_struct (void *);
#define gt_ggc_m_12elt_loc_list(X) do { \
  if (X != NULL) gt_ggc_mx_elt_loc_list (X);\
  } while (0)
extern void gt_ggc_mx_elt_loc_list (void *);
#define gt_ggc_m_13VEC_loop_p_gc(X) do { \
  if (X != NULL) gt_ggc_mx_VEC_loop_p_gc (X);\
  } while (0)
extern void gt_ggc_mx_VEC_loop_p_gc (void *);
#define gt_ggc_m_4loop(X) do { \
  if (X != NULL) gt_ggc_mx_loop (X);\
  } while (0)
extern void gt_ggc_mx_loop (void *);
#define gt_ggc_m_9loop_exit(X) do { \
  if (X != NULL) gt_ggc_mx_loop_exit (X);\
  } while (0)
extern void gt_ggc_mx_loop_exit (void *);
#define gt_ggc_m_13nb_iter_bound(X) do { \
  if (X != NULL) gt_ggc_mx_nb_iter_bound (X);\
  } while (0)
extern void gt_ggc_mx_nb_iter_bound (void *);
#define gt_ggc_m_17language_function(X) do { \
  if (X != NULL) gt_ggc_mx_language_function (X);\
  } while (0)
extern void gt_ggc_mx_language_function (void *);
#define gt_ggc_m_5loops(X) do { \
  if (X != NULL) gt_ggc_mx_loops (X);\
  } while (0)
extern void gt_ggc_mx_loops (void *);
#define gt_ggc_m_18control_flow_graph(X) do { \
  if (X != NULL) gt_ggc_mx_control_flow_graph (X);\
  } while (0)
extern void gt_ggc_mx_control_flow_graph (void *);
#define gt_ggc_m_9eh_status(X) do { \
  if (X != NULL) gt_ggc_mx_eh_status (X);\
  } while (0)
extern void gt_ggc_mx_eh_status (void *);
#define gt_ggc_m_20initial_value_struct(X) do { \
  if (X != NULL) gt_ggc_mx_initial_value_struct (X);\
  } while (0)
extern void gt_ggc_mx_initial_value_struct (void *);
#define gt_ggc_m_17rtx_constant_pool(X) do { \
  if (X != NULL) gt_ggc_mx_rtx_constant_pool (X);\
  } while (0)
extern void gt_ggc_mx_rtx_constant_pool (void *);
#define gt_ggc_m_18VEC_temp_slot_p_gc(X) do { \
  if (X != NULL) gt_ggc_mx_VEC_temp_slot_p_gc (X);\
  } while (0)
extern void gt_ggc_mx_VEC_temp_slot_p_gc (void *);
#define gt_ggc_m_9temp_slot(X) do { \
  if (X != NULL) gt_ggc_mx_temp_slot (X);\
  } while (0)
extern void gt_ggc_mx_temp_slot (void *);
#define gt_ggc_m_9gimple_df(X) do { \
  if (X != NULL) gt_ggc_mx_gimple_df (X);\
  } while (0)
extern void gt_ggc_mx_gimple_df (void *);
#define gt_ggc_m_23VEC_call_site_record_gc(X) do { \
  if (X != NULL) gt_ggc_mx_VEC_call_site_record_gc (X);\
  } while (0)
extern void gt_ggc_mx_VEC_call_site_record_gc (void *);
#define gt_ggc_m_18call_site_record_d(X) do { \
  if (X != NULL) gt_ggc_mx_call_site_record_d (X);\
  } while (0)
extern void gt_ggc_mx_call_site_record_d (void *);
#define gt_ggc_m_14sequence_stack(X) do { \
  if (X != NULL) gt_ggc_mx_sequence_stack (X);\
  } while (0)
extern void gt_ggc_mx_sequence_stack (void *);
#define gt_ggc_m_8elt_list(X) do { \
  if (X != NULL) gt_ggc_mx_elt_list (X);\
  } while (0)
extern void gt_ggc_mx_elt_list (void *);
#define gt_ggc_m_17tree_priority_map(X) do { \
  if (X != NULL) gt_ggc_mx_tree_priority_map (X);\
  } while (0)
extern void gt_ggc_mx_tree_priority_map (void *);
#define gt_ggc_m_12tree_int_map(X) do { \
  if (X != NULL) gt_ggc_mx_tree_int_map (X);\
  } while (0)
extern void gt_ggc_mx_tree_int_map (void *);
#define gt_ggc_m_8tree_map(X) do { \
  if (X != NULL) gt_ggc_mx_tree_map (X);\
  } while (0)
extern void gt_ggc_mx_tree_map (void *);
#define gt_ggc_m_14lang_tree_node(X) do { \
  if (X != NULL) gt_ggc_mx_lang_tree_node (X);\
  } while (0)
extern void gt_ggc_mx_lang_tree_node (void *);
#define gt_ggc_m_24tree_statement_list_node(X) do { \
  if (X != NULL) gt_ggc_mx_tree_statement_list_node (X);\
  } while (0)
extern void gt_ggc_mx_tree_statement_list_node (void *);
#define gt_ggc_m_9lang_decl(X) do { \
  if (X != NULL) gt_ggc_mx_lang_decl (X);\
  } while (0)
extern void gt_ggc_mx_lang_decl (void *);
#define gt_ggc_m_9lang_type(X) do { \
  if (X != NULL) gt_ggc_mx_lang_type (X);\
  } while (0)
extern void gt_ggc_mx_lang_type (void *);
#define gt_ggc_m_10die_struct(X) do { \
  if (X != NULL) gt_ggc_mx_die_struct (X);\
  } while (0)
extern void gt_ggc_mx_die_struct (void *);
#define gt_ggc_m_15varray_head_tag(X) do { \
  if (X != NULL) gt_ggc_mx_varray_head_tag (X);\
  } while (0)
extern void gt_ggc_mx_varray_head_tag (void *);
#define gt_ggc_m_12ptr_info_def(X) do { \
  if (X != NULL) gt_ggc_mx_ptr_info_def (X);\
  } while (0)
extern void gt_ggc_mx_ptr_info_def (void *);
#define gt_ggc_m_22VEC_constructor_elt_gc(X) do { \
  if (X != NULL) gt_ggc_mx_VEC_constructor_elt_gc (X);\
  } while (0)
extern void gt_ggc_mx_VEC_constructor_elt_gc (void *);
#define gt_ggc_m_10tree_ann_d(X) do { \
  if (X != NULL) gt_ggc_mx_tree_ann_d (X);\
  } while (0)
extern void gt_ggc_mx_tree_ann_d (void *);
#define gt_ggc_m_17VEC_alias_pair_gc(X) do { \
  if (X != NULL) gt_ggc_mx_VEC_alias_pair_gc (X);\
  } while (0)
extern void gt_ggc_mx_VEC_alias_pair_gc (void *);
#define gt_ggc_m_11VEC_tree_gc(X) do { \
  if (X != NULL) gt_ggc_mx_VEC_tree_gc (X);\
  } while (0)
extern void gt_ggc_mx_VEC_tree_gc (void *);
#define gt_ggc_m_8function(X) do { \
  if (X != NULL) gt_ggc_mx_function (X);\
  } while (0)
extern void gt_ggc_mx_function (void *);
#define gt_ggc_m_23constant_descriptor_rtx(X) do { \
  if (X != NULL) gt_ggc_mx_constant_descriptor_rtx (X);\
  } while (0)
extern void gt_ggc_mx_constant_descriptor_rtx (void *);
#define gt_ggc_m_11fixed_value(X) do { \
  if (X != NULL) gt_ggc_mx_fixed_value (X);\
  } while (0)
extern void gt_ggc_mx_fixed_value (void *);
#define gt_ggc_m_10real_value(X) do { \
  if (X != NULL) gt_ggc_mx_real_value (X);\
  } while (0)
extern void gt_ggc_mx_real_value (void *);
#define gt_ggc_m_10VEC_rtx_gc(X) do { \
  if (X != NULL) gt_ggc_mx_VEC_rtx_gc (X);\
  } while (0)
extern void gt_ggc_mx_VEC_rtx_gc (void *);
#define gt_ggc_m_12object_block(X) do { \
  if (X != NULL) gt_ggc_mx_object_block (X);\
  } while (0)
extern void gt_ggc_mx_object_block (void *);
#define gt_ggc_m_9reg_attrs(X) do { \
  if (X != NULL) gt_ggc_mx_reg_attrs (X);\
  } while (0)
extern void gt_ggc_mx_reg_attrs (void *);
#define gt_ggc_m_9mem_attrs(X) do { \
  if (X != NULL) gt_ggc_mx_mem_attrs (X);\
  } while (0)
extern void gt_ggc_mx_mem_attrs (void *);
#define gt_ggc_m_14bitmap_obstack(X) do { \
  if (X != NULL) gt_ggc_mx_bitmap_obstack (X);\
  } while (0)
extern void gt_ggc_mx_bitmap_obstack (void *);
#define gt_ggc_m_18bitmap_element_def(X) do { \
  if (X != NULL) gt_ggc_mx_bitmap_element_def (X);\
  } while (0)
extern void gt_ggc_mx_bitmap_element_def (void *);
#define gt_ggc_m_16machine_function(X) do { \
  if (X != NULL) gt_ggc_mx_machine_function (X);\
  } while (0)
extern void gt_ggc_mx_machine_function (void *);
#define gt_ggc_m_17stack_local_entry(X) do { \
  if (X != NULL) gt_ggc_mx_stack_local_entry (X);\
  } while (0)
extern void gt_ggc_mx_stack_local_entry (void *);
#define gt_ggc_m_15basic_block_def(X) do { \
  if (X != NULL) gt_ggc_mx_basic_block_def (X);\
  } while (0)
extern void gt_ggc_mx_basic_block_def (void *);
#define gt_ggc_m_8edge_def(X) do { \
  if (X != NULL) gt_ggc_mx_edge_def (X);\
  } while (0)
extern void gt_ggc_mx_edge_def (void *);
#define gt_ggc_m_17gimple_seq_node_d(X) do { \
  if (X != NULL) gt_ggc_mx_gimple_seq_node_d (X);\
  } while (0)
extern void gt_ggc_mx_gimple_seq_node_d (void *);
#define gt_ggc_m_12gimple_seq_d(X) do { \
  if (X != NULL) gt_ggc_mx_gimple_seq_d (X);\
  } while (0)
extern void gt_ggc_mx_gimple_seq_d (void *);
#define gt_ggc_m_7section(X) do { \
  if (X != NULL) gt_ggc_mx_section (X);\
  } while (0)
extern void gt_ggc_mx_section (void *);
#define gt_ggc_m_18gimple_statement_d(X) do { \
  if (X != NULL) gt_ggc_mx_gimple_statement_d (X);\
  } while (0)
extern void gt_ggc_mx_gimple_statement_d (void *);
#define gt_ggc_m_9rtvec_def(X) do { \
  if (X != NULL) gt_ggc_mx_rtvec_def (X);\
  } while (0)
extern void gt_ggc_mx_rtvec_def (void *);
#define gt_ggc_m_7rtx_def(X) do { \
  if (X != NULL) gt_ggc_mx_rtx_def (X);\
  } while (0)
extern void gt_ggc_mx_rtx_def (void *);
#define gt_ggc_m_15bitmap_head_def(X) do { \
  if (X != NULL) gt_ggc_mx_bitmap_head_def (X);\
  } while (0)
extern void gt_ggc_mx_bitmap_head_def (void *);
#define gt_ggc_m_9tree_node(X) do { \
  if (X != NULL) gt_ggc_mx_tree_node (X);\
  } while (0)
#define gt_ggc_mx_tree_node gt_ggc_mx_lang_tree_node
#define gt_ggc_m_6answer(X) do { \
  if (X != NULL) gt_ggc_mx_answer (X);\
  } while (0)
extern void gt_ggc_mx_answer (void *);
#define gt_ggc_m_9cpp_macro(X) do { \
  if (X != NULL) gt_ggc_mx_cpp_macro (X);\
  } while (0)
extern void gt_ggc_mx_cpp_macro (void *);
#define gt_ggc_m_9cpp_token(X) do { \
  if (X != NULL) gt_ggc_mx_cpp_token (X);\
  } while (0)
extern void gt_ggc_mx_cpp_token (void *);
#define gt_ggc_m_9line_maps(X) do { \
  if (X != NULL) gt_ggc_mx_line_maps (X);\
  } while (0)
extern void gt_ggc_mx_line_maps (void *);
extern void gt_ggc_m_II17splay_tree_node_s (void *);
extern void gt_ggc_m_SP9tree_node17splay_tree_node_s (void *);
extern void gt_ggc_m_P9tree_nodeP9tree_node17splay_tree_node_s (void *);
extern void gt_ggc_m_IP9tree_node17splay_tree_node_s (void *);
extern void gt_ggc_m_P13tree_llvm_map4htab (void *);

void
gt_ggc_m_P13tree_llvm_map4htab (void *x_p)
{
  struct htab * const x = (struct htab *)x_p;
  if (ggc_test_and_set_mark (x))
    {
      if ((*x).entries != NULL) {
        size_t i0;
        for (i0 = 0; i0 != (size_t)(((*x)).size); i0++) {
          gt_ggc_m_13tree_llvm_map ((*x).entries[i0]);
        }
        ggc_mark ((*x).entries);
      }
    }
}
extern void gt_ggc_m_P15interface_tuple4htab (void *);
extern void gt_ggc_m_P16volatilized_type4htab (void *);
extern void gt_ggc_m_P17string_descriptor4htab (void *);
extern void gt_ggc_m_P14type_assertion4htab (void *);
extern void gt_ggc_m_P18treetreehash_entry4htab (void *);
extern void gt_ggc_m_P17module_htab_entry4htab (void *);
extern void gt_ggc_m_P16def_pragma_macro4htab (void *);
extern void gt_ggc_m_P21pending_abstract_type4htab (void *);
extern void gt_ggc_m_P10spec_entry4htab (void *);
extern void gt_ggc_m_P16cxx_int_tree_map4htab (void *);
extern void gt_ggc_m_P17named_label_entry4htab (void *);
extern void gt_ggc_m_P12tree_int_map4htab (void *);
extern void gt_ggc_m_P19lto_symtab_decl_def4htab (void *);
extern void gt_ggc_m_P25lto_symtab_identifier_def4htab (void *);
extern void gt_ggc_m_IP9tree_node12splay_tree_s (void *);
extern void gt_ggc_m_P9tree_nodeP9tree_node12splay_tree_s (void *);
extern void gt_ggc_m_P12varpool_node4htab (void *);
extern void gt_ggc_m_P13scev_info_str4htab (void *);
extern void gt_ggc_m_P23constant_descriptor_rtx4htab (void *);
extern void gt_ggc_m_P24constant_descriptor_tree4htab (void *);
extern void gt_ggc_m_P12object_block4htab (void *);
extern void gt_ggc_m_P7section4htab (void *);
extern void gt_ggc_m_P17tree_priority_map4htab (void *);
extern void gt_ggc_m_P8tree_map4htab (void *);
extern void gt_ggc_m_P9type_hash4htab (void *);
extern void gt_ggc_m_P13libfunc_entry4htab (void *);
extern void gt_ggc_m_P23temp_slot_address_entry4htab (void *);
extern void gt_ggc_m_P15throw_stmt_node4htab (void *);
extern void gt_ggc_m_P9reg_attrs4htab (void *);
extern void gt_ggc_m_P9mem_attrs4htab (void *);
extern void gt_ggc_m_P7rtx_def4htab (void *);
extern void gt_ggc_m_SP9tree_node12splay_tree_s (void *);
extern void gt_ggc_m_P16var_loc_list_def4htab (void *);
extern void gt_ggc_m_P10die_struct4htab (void *);
extern void gt_ggc_m_P15dwarf_file_data4htab (void *);
extern void gt_ggc_m_P20indirect_string_node4htab (void *);
extern void gt_ggc_m_P11cgraph_node4htab (void *);
extern void gt_ggc_m_II12splay_tree_s (void *);
extern void gt_ggc_m_P27cgraph_node_set_element_def4htab (void *);
extern void gt_ggc_m_P11cgraph_edge4htab (void *);
extern void gt_ggc_m_P9loop_exit4htab (void *);
extern void gt_ggc_m_P9tree_node4htab (void *);

/* PCH type-walking procedures.  */
#define gt_pch_n_13tree_llvm_map(X) do { \
  if (X != NULL) gt_pch_nx_tree_llvm_map (X);\
  } while (0)
extern void gt_pch_nx_tree_llvm_map (void *);
#define gt_pch_n_15interface_tuple(X) do { \
  if (X != NULL) gt_pch_nx_interface_tuple (X);\
  } while (0)
extern void gt_pch_nx_interface_tuple (void *);
#define gt_pch_n_16volatilized_type(X) do { \
  if (X != NULL) gt_pch_nx_volatilized_type (X);\
  } while (0)
extern void gt_pch_nx_volatilized_type (void *);
#define gt_pch_n_17string_descriptor(X) do { \
  if (X != NULL) gt_pch_nx_string_descriptor (X);\
  } while (0)
extern void gt_pch_nx_string_descriptor (void *);
#define gt_pch_n_15c_inline_static(X) do { \
  if (X != NULL) gt_pch_nx_c_inline_static (X);\
  } while (0)
extern void gt_pch_nx_c_inline_static (void *);
#define gt_pch_n_24VEC_c_goto_bindings_p_gc(X) do { \
  if (X != NULL) gt_pch_nx_VEC_c_goto_bindings_p_gc (X);\
  } while (0)
extern void gt_pch_nx_VEC_c_goto_bindings_p_gc (void *);
#define gt_pch_n_15c_goto_bindings(X) do { \
  if (X != NULL) gt_pch_nx_c_goto_bindings (X);\
  } while (0)
extern void gt_pch_nx_c_goto_bindings (void *);
#define gt_pch_n_7c_scope(X) do { \
  if (X != NULL) gt_pch_nx_c_scope (X);\
  } while (0)
extern void gt_pch_nx_c_scope (void *);
#define gt_pch_n_9c_binding(X) do { \
  if (X != NULL) gt_pch_nx_c_binding (X);\
  } while (0)
extern void gt_pch_nx_c_binding (void *);
#define gt_pch_n_12c_label_vars(X) do { \
  if (X != NULL) gt_pch_nx_c_label_vars (X);\
  } while (0)
extern void gt_pch_nx_c_label_vars (void *);
#define gt_pch_n_8c_parser(X) do { \
  if (X != NULL) gt_pch_nx_c_parser (X);\
  } while (0)
extern void gt_pch_nx_c_parser (void *);
#define gt_pch_n_9imp_entry(X) do { \
  if (X != NULL) gt_pch_nx_imp_entry (X);\
  } while (0)
extern void gt_pch_nx_imp_entry (void *);
#define gt_pch_n_16hashed_attribute(X) do { \
  if (X != NULL) gt_pch_nx_hashed_attribute (X);\
  } while (0)
extern void gt_pch_nx_hashed_attribute (void *);
#define gt_pch_n_12hashed_entry(X) do { \
  if (X != NULL) gt_pch_nx_hashed_entry (X);\
  } while (0)
extern void gt_pch_nx_hashed_entry (void *);
#define gt_pch_n_14type_assertion(X) do { \
  if (X != NULL) gt_pch_nx_type_assertion (X);\
  } while (0)
extern void gt_pch_nx_type_assertion (void *);
#define gt_pch_n_18treetreehash_entry(X) do { \
  if (X != NULL) gt_pch_nx_treetreehash_entry (X);\
  } while (0)
extern void gt_pch_nx_treetreehash_entry (void *);
#define gt_pch_n_5CPool(X) do { \
  if (X != NULL) gt_pch_nx_CPool (X);\
  } while (0)
extern void gt_pch_nx_CPool (void *);
#define gt_pch_n_3JCF(X) do { \
  if (X != NULL) gt_pch_nx_JCF (X);\
  } while (0)
extern void gt_pch_nx_JCF (void *);
#define gt_pch_n_17module_htab_entry(X) do { \
  if (X != NULL) gt_pch_nx_module_htab_entry (X);\
  } while (0)
extern void gt_pch_nx_module_htab_entry (void *);
#define gt_pch_n_13binding_level(X) do { \
  if (X != NULL) gt_pch_nx_binding_level (X);\
  } while (0)
extern void gt_pch_nx_binding_level (void *);
#define gt_pch_n_9opt_stack(X) do { \
  if (X != NULL) gt_pch_nx_opt_stack (X);\
  } while (0)
extern void gt_pch_nx_opt_stack (void *);
#define gt_pch_n_16def_pragma_macro(X) do { \
  if (X != NULL) gt_pch_nx_def_pragma_macro (X);\
  } while (0)
extern void gt_pch_nx_def_pragma_macro (void *);
#define gt_pch_n_22def_pragma_macro_value(X) do { \
  if (X != NULL) gt_pch_nx_def_pragma_macro_value (X);\
  } while (0)
extern void gt_pch_nx_def_pragma_macro_value (void *);
#define gt_pch_n_11align_stack(X) do { \
  if (X != NULL) gt_pch_nx_align_stack (X);\
  } while (0)
extern void gt_pch_nx_align_stack (void *);
#define gt_pch_n_18VEC_tree_gc_vec_gc(X) do { \
  if (X != NULL) gt_pch_nx_VEC_tree_gc_vec_gc (X);\
  } while (0)
extern void gt_pch_nx_VEC_tree_gc_vec_gc (void *);
#define gt_pch_n_19VEC_const_char_p_gc(X) do { \
  if (X != NULL) gt_pch_nx_VEC_const_char_p_gc (X);\
  } while (0)
extern void gt_pch_nx_VEC_const_char_p_gc (void *);
#define gt_pch_n_21pending_abstract_type(X) do { \
  if (X != NULL) gt_pch_nx_pending_abstract_type (X);\
  } while (0)
extern void gt_pch_nx_pending_abstract_type (void *);
#define gt_pch_n_9cp_parser(X) do { \
  if (X != NULL) gt_pch_nx_cp_parser (X);\
  } while (0)
extern void gt_pch_nx_cp_parser (void *);
#define gt_pch_n_17cp_parser_context(X) do { \
  if (X != NULL) gt_pch_nx_cp_parser_context (X);\
  } while (0)
extern void gt_pch_nx_cp_parser_context (void *);
#define gt_pch_n_8cp_lexer(X) do { \
  if (X != NULL) gt_pch_nx_cp_lexer (X);\
  } while (0)
extern void gt_pch_nx_cp_lexer (void *);
#define gt_pch_n_10tree_check(X) do { \
  if (X != NULL) gt_pch_nx_tree_check (X);\
  } while (0)
extern void gt_pch_nx_tree_check (void *);
#define gt_pch_n_22VEC_deferred_access_gc(X) do { \
  if (X != NULL) gt_pch_nx_VEC_deferred_access_gc (X);\
  } while (0)
extern void gt_pch_nx_VEC_deferred_access_gc (void *);
#define gt_pch_n_10spec_entry(X) do { \
  if (X != NULL) gt_pch_nx_spec_entry (X);\
  } while (0)
extern void gt_pch_nx_spec_entry (void *);
#define gt_pch_n_16pending_template(X) do { \
  if (X != NULL) gt_pch_nx_pending_template (X);\
  } while (0)
extern void gt_pch_nx_pending_template (void *);
#define gt_pch_n_21named_label_use_entry(X) do { \
  if (X != NULL) gt_pch_nx_named_label_use_entry (X);\
  } while (0)
extern void gt_pch_nx_named_label_use_entry (void *);
#define gt_pch_n_28VEC_deferred_access_check_gc(X) do { \
  if (X != NULL) gt_pch_nx_VEC_deferred_access_check_gc (X);\
  } while (0)
extern void gt_pch_nx_VEC_deferred_access_check_gc (void *);
#define gt_pch_n_11tinst_level(X) do { \
  if (X != NULL) gt_pch_nx_tinst_level (X);\
  } while (0)
extern void gt_pch_nx_tinst_level (void *);
#define gt_pch_n_18sorted_fields_type(X) do { \
  if (X != NULL) gt_pch_nx_sorted_fields_type (X);\
  } while (0)
extern void gt_pch_nx_sorted_fields_type (void *);
#define gt_pch_n_18VEC_tree_pair_s_gc(X) do { \
  if (X != NULL) gt_pch_nx_VEC_tree_pair_s_gc (X);\
  } while (0)
extern void gt_pch_nx_VEC_tree_pair_s_gc (void *);
#define gt_pch_n_17named_label_entry(X) do { \
  if (X != NULL) gt_pch_nx_named_label_entry (X);\
  } while (0)
extern void gt_pch_nx_named_label_entry (void *);
#define gt_pch_n_14cp_token_cache(X) do { \
  if (X != NULL) gt_pch_nx_cp_token_cache (X);\
  } while (0)
extern void gt_pch_nx_cp_token_cache (void *);
#define gt_pch_n_11saved_scope(X) do { \
  if (X != NULL) gt_pch_nx_saved_scope (X);\
  } while (0)
extern void gt_pch_nx_saved_scope (void *);
#define gt_pch_n_16cxx_int_tree_map(X) do { \
  if (X != NULL) gt_pch_nx_cxx_int_tree_map (X);\
  } while (0)
extern void gt_pch_nx_cxx_int_tree_map (void *);
#define gt_pch_n_23VEC_cp_class_binding_gc(X) do { \
  if (X != NULL) gt_pch_nx_VEC_cp_class_binding_gc (X);\
  } while (0)
extern void gt_pch_nx_VEC_cp_class_binding_gc (void *);
#define gt_pch_n_24VEC_cxx_saved_binding_gc(X) do { \
  if (X != NULL) gt_pch_nx_VEC_cxx_saved_binding_gc (X);\
  } while (0)
extern void gt_pch_nx_VEC_cxx_saved_binding_gc (void *);
#define gt_pch_n_16cp_binding_level(X) do { \
  if (X != NULL) gt_pch_nx_cp_binding_level (X);\
  } while (0)
extern void gt_pch_nx_cp_binding_level (void *);
#define gt_pch_n_11cxx_binding(X) do { \
  if (X != NULL) gt_pch_nx_cxx_binding (X);\
  } while (0)
extern void gt_pch_nx_cxx_binding (void *);
#define gt_pch_n_15binding_entry_s(X) do { \
  if (X != NULL) gt_pch_nx_binding_entry_s (X);\
  } while (0)
extern void gt_pch_nx_binding_entry_s (void *);
#define gt_pch_n_15binding_table_s(X) do { \
  if (X != NULL) gt_pch_nx_binding_table_s (X);\
  } while (0)
extern void gt_pch_nx_binding_table_s (void *);
#define gt_pch_n_14VEC_tinfo_s_gc(X) do { \
  if (X != NULL) gt_pch_nx_VEC_tinfo_s_gc (X);\
  } while (0)
extern void gt_pch_nx_VEC_tinfo_s_gc (void *);
#define gt_pch_n_18gnat_binding_level(X) do { \
  if (X != NULL) gt_pch_nx_gnat_binding_level (X);\
  } while (0)
extern void gt_pch_nx_gnat_binding_level (void *);
#define gt_pch_n_9elab_info(X) do { \
  if (X != NULL) gt_pch_nx_elab_info (X);\
  } while (0)
extern void gt_pch_nx_elab_info (void *);
#define gt_pch_n_10stmt_group(X) do { \
  if (X != NULL) gt_pch_nx_stmt_group (X);\
  } while (0)
extern void gt_pch_nx_stmt_group (void *);
#define gt_pch_n_16VEC_parm_attr_gc(X) do { \
  if (X != NULL) gt_pch_nx_VEC_parm_attr_gc (X);\
  } while (0)
extern void gt_pch_nx_VEC_parm_attr_gc (void *);
#define gt_pch_n_11parm_attr_d(X) do { \
  if (X != NULL) gt_pch_nx_parm_attr_d (X);\
  } while (0)
extern void gt_pch_nx_parm_attr_d (void *);
#define gt_pch_n_19lto_symtab_decl_def(X) do { \
  if (X != NULL) gt_pch_nx_lto_symtab_decl_def (X);\
  } while (0)
extern void gt_pch_nx_lto_symtab_decl_def (void *);
#define gt_pch_n_25lto_symtab_identifier_def(X) do { \
  if (X != NULL) gt_pch_nx_lto_symtab_identifier_def (X);\
  } while (0)
extern void gt_pch_nx_lto_symtab_identifier_def (void *);
#define gt_pch_n_20ssa_operand_memory_d(X) do { \
  if (X != NULL) gt_pch_nx_ssa_operand_memory_d (X);\
  } while (0)
extern void gt_pch_nx_ssa_operand_memory_d (void *);
#define gt_pch_n_13scev_info_str(X) do { \
  if (X != NULL) gt_pch_nx_scev_info_str (X);\
  } while (0)
extern void gt_pch_nx_scev_info_str (void *);
#define gt_pch_n_13VEC_gimple_gc(X) do { \
  if (X != NULL) gt_pch_nx_VEC_gimple_gc (X);\
  } while (0)
extern void gt_pch_nx_VEC_gimple_gc (void *);
#define gt_pch_n_9type_hash(X) do { \
  if (X != NULL) gt_pch_nx_type_hash (X);\
  } while (0)
extern void gt_pch_nx_type_hash (void *);
#define gt_pch_n_16string_pool_data(X) do { \
  if (X != NULL) gt_pch_nx_string_pool_data (X);\
  } while (0)
extern void gt_pch_nx_string_pool_data (void *);
#define gt_pch_n_13libfunc_entry(X) do { \
  if (X != NULL) gt_pch_nx_libfunc_entry (X);\
  } while (0)
extern void gt_pch_nx_libfunc_entry (void *);
#define gt_pch_n_23temp_slot_address_entry(X) do { \
  if (X != NULL) gt_pch_nx_temp_slot_address_entry (X);\
  } while (0)
extern void gt_pch_nx_temp_slot_address_entry (void *);
#define gt_pch_n_15throw_stmt_node(X) do { \
  if (X != NULL) gt_pch_nx_throw_stmt_node (X);\
  } while (0)
extern void gt_pch_nx_throw_stmt_node (void *);
#define gt_pch_n_16VEC_eh_region_gc(X) do { \
  if (X != NULL) gt_pch_nx_VEC_eh_region_gc (X);\
  } while (0)
extern void gt_pch_nx_VEC_eh_region_gc (void *);
#define gt_pch_n_11eh_region_d(X) do { \
  if (X != NULL) gt_pch_nx_eh_region_d (X);\
  } while (0)
extern void gt_pch_nx_eh_region_d (void *);
#define gt_pch_n_16var_loc_list_def(X) do { \
  if (X != NULL) gt_pch_nx_var_loc_list_def (X);\
  } while (0)
extern void gt_pch_nx_var_loc_list_def (void *);
#define gt_pch_n_12var_loc_node(X) do { \
  if (X != NULL) gt_pch_nx_var_loc_node (X);\
  } while (0)
extern void gt_pch_nx_var_loc_node (void *);
#define gt_pch_n_20VEC_die_arg_entry_gc(X) do { \
  if (X != NULL) gt_pch_nx_VEC_die_arg_entry_gc (X);\
  } while (0)
extern void gt_pch_nx_VEC_die_arg_entry_gc (void *);
#define gt_pch_n_16limbo_die_struct(X) do { \
  if (X != NULL) gt_pch_nx_limbo_die_struct (X);\
  } while (0)
extern void gt_pch_nx_limbo_die_struct (void *);
#define gt_pch_n_20VEC_pubname_entry_gc(X) do { \
  if (X != NULL) gt_pch_nx_VEC_pubname_entry_gc (X);\
  } while (0)
extern void gt_pch_nx_VEC_pubname_entry_gc (void *);
#define gt_pch_n_19VEC_dw_attr_node_gc(X) do { \
  if (X != NULL) gt_pch_nx_VEC_dw_attr_node_gc (X);\
  } while (0)
extern void gt_pch_nx_VEC_dw_attr_node_gc (void *);
#define gt_pch_n_25dw_ranges_by_label_struct(X) do { \
  if (X != NULL) gt_pch_nx_dw_ranges_by_label_struct (X);\
  } while (0)
extern void gt_pch_nx_dw_ranges_by_label_struct (void *);
#define gt_pch_n_16dw_ranges_struct(X) do { \
  if (X != NULL) gt_pch_nx_dw_ranges_struct (X);\
  } while (0)
extern void gt_pch_nx_dw_ranges_struct (void *);
#define gt_pch_n_28dw_separate_line_info_struct(X) do { \
  if (X != NULL) gt_pch_nx_dw_separate_line_info_struct (X);\
  } while (0)
extern void gt_pch_nx_dw_separate_line_info_struct (void *);
#define gt_pch_n_19dw_line_info_struct(X) do { \
  if (X != NULL) gt_pch_nx_dw_line_info_struct (X);\
  } while (0)
extern void gt_pch_nx_dw_line_info_struct (void *);
#define gt_pch_n_25VEC_deferred_locations_gc(X) do { \
  if (X != NULL) gt_pch_nx_VEC_deferred_locations_gc (X);\
  } while (0)
extern void gt_pch_nx_VEC_deferred_locations_gc (void *);
#define gt_pch_n_18dw_loc_list_struct(X) do { \
  if (X != NULL) gt_pch_nx_dw_loc_list_struct (X);\
  } while (0)
extern void gt_pch_nx_dw_loc_list_struct (void *);
#define gt_pch_n_15dwarf_file_data(X) do { \
  if (X != NULL) gt_pch_nx_dwarf_file_data (X);\
  } while (0)
extern void gt_pch_nx_dwarf_file_data (void *);
#define gt_pch_n_15queued_reg_save(X) do { \
  if (X != NULL) gt_pch_nx_queued_reg_save (X);\
  } while (0)
extern void gt_pch_nx_queued_reg_save (void *);
#define gt_pch_n_20indirect_string_node(X) do { \
  if (X != NULL) gt_pch_nx_indirect_string_node (X);\
  } while (0)
extern void gt_pch_nx_indirect_string_node (void *);
#define gt_pch_n_19dw_loc_descr_struct(X) do { \
  if (X != NULL) gt_pch_nx_dw_loc_descr_struct (X);\
  } while (0)
extern void gt_pch_nx_dw_loc_descr_struct (void *);
#define gt_pch_n_13dw_fde_struct(X) do { \
  if (X != NULL) gt_pch_nx_dw_fde_struct (X);\
  } while (0)
extern void gt_pch_nx_dw_fde_struct (void *);
#define gt_pch_n_13dw_cfi_struct(X) do { \
  if (X != NULL) gt_pch_nx_dw_cfi_struct (X);\
  } while (0)
extern void gt_pch_nx_dw_cfi_struct (void *);
#define gt_pch_n_8typeinfo(X) do { \
  if (X != NULL) gt_pch_nx_typeinfo (X);\
  } while (0)
extern void gt_pch_nx_typeinfo (void *);
#define gt_pch_n_22VEC_alias_set_entry_gc(X) do { \
  if (X != NULL) gt_pch_nx_VEC_alias_set_entry_gc (X);\
  } while (0)
extern void gt_pch_nx_VEC_alias_set_entry_gc (void *);
#define gt_pch_n_17alias_set_entry_d(X) do { \
  if (X != NULL) gt_pch_nx_alias_set_entry_d (X);\
  } while (0)
extern void gt_pch_nx_alias_set_entry_d (void *);
#define gt_pch_n_24constant_descriptor_tree(X) do { \
  if (X != NULL) gt_pch_nx_constant_descriptor_tree (X);\
  } while (0)
extern void gt_pch_nx_constant_descriptor_tree (void *);
#define gt_pch_n_15cgraph_asm_node(X) do { \
  if (X != NULL) gt_pch_nx_cgraph_asm_node (X);\
  } while (0)
extern void gt_pch_nx_cgraph_asm_node (void *);
#define gt_pch_n_12varpool_node(X) do { \
  if (X != NULL) gt_pch_nx_varpool_node (X);\
  } while (0)
extern void gt_pch_nx_varpool_node (void *);
#define gt_pch_n_22VEC_cgraph_node_set_gc(X) do { \
  if (X != NULL) gt_pch_nx_VEC_cgraph_node_set_gc (X);\
  } while (0)
extern void gt_pch_nx_VEC_cgraph_node_set_gc (void *);
#define gt_pch_n_19cgraph_node_set_def(X) do { \
  if (X != NULL) gt_pch_nx_cgraph_node_set_def (X);\
  } while (0)
extern void gt_pch_nx_cgraph_node_set_def (void *);
#define gt_pch_n_27cgraph_node_set_element_def(X) do { \
  if (X != NULL) gt_pch_nx_cgraph_node_set_element_def (X);\
  } while (0)
extern void gt_pch_nx_cgraph_node_set_element_def (void *);
#define gt_pch_n_22VEC_cgraph_node_ptr_gc(X) do { \
  if (X != NULL) gt_pch_nx_VEC_cgraph_node_ptr_gc (X);\
  } while (0)
extern void gt_pch_nx_VEC_cgraph_node_ptr_gc (void *);
#define gt_pch_n_11cgraph_edge(X) do { \
  if (X != NULL) gt_pch_nx_cgraph_edge (X);\
  } while (0)
extern void gt_pch_nx_cgraph_edge (void *);
#define gt_pch_n_24VEC_ipa_replace_map_p_gc(X) do { \
  if (X != NULL) gt_pch_nx_VEC_ipa_replace_map_p_gc (X);\
  } while (0)
extern void gt_pch_nx_VEC_ipa_replace_map_p_gc (void *);
#define gt_pch_n_15ipa_replace_map(X) do { \
  if (X != NULL) gt_pch_nx_ipa_replace_map (X);\
  } while (0)
extern void gt_pch_nx_ipa_replace_map (void *);
#define gt_pch_n_11cgraph_node(X) do { \
  if (X != NULL) gt_pch_nx_cgraph_node (X);\
  } while (0)
extern void gt_pch_nx_cgraph_node (void *);
#define gt_pch_n_18VEC_basic_block_gc(X) do { \
  if (X != NULL) gt_pch_nx_VEC_basic_block_gc (X);\
  } while (0)
extern void gt_pch_nx_VEC_basic_block_gc (void *);
#define gt_pch_n_14gimple_bb_info(X) do { \
  if (X != NULL) gt_pch_nx_gimple_bb_info (X);\
  } while (0)
extern void gt_pch_nx_gimple_bb_info (void *);
#define gt_pch_n_11rtl_bb_info(X) do { \
  if (X != NULL) gt_pch_nx_rtl_bb_info (X);\
  } while (0)
extern void gt_pch_nx_rtl_bb_info (void *);
#define gt_pch_n_11VEC_edge_gc(X) do { \
  if (X != NULL) gt_pch_nx_VEC_edge_gc (X);\
  } while (0)
extern void gt_pch_nx_VEC_edge_gc (void *);
#define gt_pch_n_17cselib_val_struct(X) do { \
  if (X != NULL) gt_pch_nx_cselib_val_struct (X);\
  } while (0)
extern void gt_pch_nx_cselib_val_struct (void *);
#define gt_pch_n_12elt_loc_list(X) do { \
  if (X != NULL) gt_pch_nx_elt_loc_list (X);\
  } while (0)
extern void gt_pch_nx_elt_loc_list (void *);
#define gt_pch_n_13VEC_loop_p_gc(X) do { \
  if (X != NULL) gt_pch_nx_VEC_loop_p_gc (X);\
  } while (0)
extern void gt_pch_nx_VEC_loop_p_gc (void *);
#define gt_pch_n_4loop(X) do { \
  if (X != NULL) gt_pch_nx_loop (X);\
  } while (0)
extern void gt_pch_nx_loop (void *);
#define gt_pch_n_9loop_exit(X) do { \
  if (X != NULL) gt_pch_nx_loop_exit (X);\
  } while (0)
extern void gt_pch_nx_loop_exit (void *);
#define gt_pch_n_13nb_iter_bound(X) do { \
  if (X != NULL) gt_pch_nx_nb_iter_bound (X);\
  } while (0)
extern void gt_pch_nx_nb_iter_bound (void *);
#define gt_pch_n_17language_function(X) do { \
  if (X != NULL) gt_pch_nx_language_function (X);\
  } while (0)
extern void gt_pch_nx_language_function (void *);
#define gt_pch_n_5loops(X) do { \
  if (X != NULL) gt_pch_nx_loops (X);\
  } while (0)
extern void gt_pch_nx_loops (void *);
#define gt_pch_n_18control_flow_graph(X) do { \
  if (X != NULL) gt_pch_nx_control_flow_graph (X);\
  } while (0)
extern void gt_pch_nx_control_flow_graph (void *);
#define gt_pch_n_9eh_status(X) do { \
  if (X != NULL) gt_pch_nx_eh_status (X);\
  } while (0)
extern void gt_pch_nx_eh_status (void *);
#define gt_pch_n_20initial_value_struct(X) do { \
  if (X != NULL) gt_pch_nx_initial_value_struct (X);\
  } while (0)
extern void gt_pch_nx_initial_value_struct (void *);
#define gt_pch_n_17rtx_constant_pool(X) do { \
  if (X != NULL) gt_pch_nx_rtx_constant_pool (X);\
  } while (0)
extern void gt_pch_nx_rtx_constant_pool (void *);
#define gt_pch_n_18VEC_temp_slot_p_gc(X) do { \
  if (X != NULL) gt_pch_nx_VEC_temp_slot_p_gc (X);\
  } while (0)
extern void gt_pch_nx_VEC_temp_slot_p_gc (void *);
#define gt_pch_n_9temp_slot(X) do { \
  if (X != NULL) gt_pch_nx_temp_slot (X);\
  } while (0)
extern void gt_pch_nx_temp_slot (void *);
#define gt_pch_n_9gimple_df(X) do { \
  if (X != NULL) gt_pch_nx_gimple_df (X);\
  } while (0)
extern void gt_pch_nx_gimple_df (void *);
#define gt_pch_n_23VEC_call_site_record_gc(X) do { \
  if (X != NULL) gt_pch_nx_VEC_call_site_record_gc (X);\
  } while (0)
extern void gt_pch_nx_VEC_call_site_record_gc (void *);
#define gt_pch_n_18call_site_record_d(X) do { \
  if (X != NULL) gt_pch_nx_call_site_record_d (X);\
  } while (0)
extern void gt_pch_nx_call_site_record_d (void *);
#define gt_pch_n_14sequence_stack(X) do { \
  if (X != NULL) gt_pch_nx_sequence_stack (X);\
  } while (0)
extern void gt_pch_nx_sequence_stack (void *);
#define gt_pch_n_8elt_list(X) do { \
  if (X != NULL) gt_pch_nx_elt_list (X);\
  } while (0)
extern void gt_pch_nx_elt_list (void *);
#define gt_pch_n_17tree_priority_map(X) do { \
  if (X != NULL) gt_pch_nx_tree_priority_map (X);\
  } while (0)
extern void gt_pch_nx_tree_priority_map (void *);
#define gt_pch_n_12tree_int_map(X) do { \
  if (X != NULL) gt_pch_nx_tree_int_map (X);\
  } while (0)
extern void gt_pch_nx_tree_int_map (void *);
#define gt_pch_n_8tree_map(X) do { \
  if (X != NULL) gt_pch_nx_tree_map (X);\
  } while (0)
extern void gt_pch_nx_tree_map (void *);
#define gt_pch_n_14lang_tree_node(X) do { \
  if (X != NULL) gt_pch_nx_lang_tree_node (X);\
  } while (0)
extern void gt_pch_nx_lang_tree_node (void *);
#define gt_pch_n_24tree_statement_list_node(X) do { \
  if (X != NULL) gt_pch_nx_tree_statement_list_node (X);\
  } while (0)
extern void gt_pch_nx_tree_statement_list_node (void *);
#define gt_pch_n_9lang_decl(X) do { \
  if (X != NULL) gt_pch_nx_lang_decl (X);\
  } while (0)
extern void gt_pch_nx_lang_decl (void *);
#define gt_pch_n_9lang_type(X) do { \
  if (X != NULL) gt_pch_nx_lang_type (X);\
  } while (0)
extern void gt_pch_nx_lang_type (void *);
#define gt_pch_n_10die_struct(X) do { \
  if (X != NULL) gt_pch_nx_die_struct (X);\
  } while (0)
extern void gt_pch_nx_die_struct (void *);
#define gt_pch_n_15varray_head_tag(X) do { \
  if (X != NULL) gt_pch_nx_varray_head_tag (X);\
  } while (0)
extern void gt_pch_nx_varray_head_tag (void *);
#define gt_pch_n_12ptr_info_def(X) do { \
  if (X != NULL) gt_pch_nx_ptr_info_def (X);\
  } while (0)
extern void gt_pch_nx_ptr_info_def (void *);
#define gt_pch_n_22VEC_constructor_elt_gc(X) do { \
  if (X != NULL) gt_pch_nx_VEC_constructor_elt_gc (X);\
  } while (0)
extern void gt_pch_nx_VEC_constructor_elt_gc (void *);
#define gt_pch_n_10tree_ann_d(X) do { \
  if (X != NULL) gt_pch_nx_tree_ann_d (X);\
  } while (0)
extern void gt_pch_nx_tree_ann_d (void *);
#define gt_pch_n_17VEC_alias_pair_gc(X) do { \
  if (X != NULL) gt_pch_nx_VEC_alias_pair_gc (X);\
  } while (0)
extern void gt_pch_nx_VEC_alias_pair_gc (void *);
#define gt_pch_n_11VEC_tree_gc(X) do { \
  if (X != NULL) gt_pch_nx_VEC_tree_gc (X);\
  } while (0)
extern void gt_pch_nx_VEC_tree_gc (void *);
#define gt_pch_n_8function(X) do { \
  if (X != NULL) gt_pch_nx_function (X);\
  } while (0)
extern void gt_pch_nx_function (void *);
#define gt_pch_n_23constant_descriptor_rtx(X) do { \
  if (X != NULL) gt_pch_nx_constant_descriptor_rtx (X);\
  } while (0)
extern void gt_pch_nx_constant_descriptor_rtx (void *);
#define gt_pch_n_11fixed_value(X) do { \
  if (X != NULL) gt_pch_nx_fixed_value (X);\
  } while (0)
extern void gt_pch_nx_fixed_value (void *);
#define gt_pch_n_10real_value(X) do { \
  if (X != NULL) gt_pch_nx_real_value (X);\
  } while (0)
extern void gt_pch_nx_real_value (void *);
#define gt_pch_n_10VEC_rtx_gc(X) do { \
  if (X != NULL) gt_pch_nx_VEC_rtx_gc (X);\
  } while (0)
extern void gt_pch_nx_VEC_rtx_gc (void *);
#define gt_pch_n_12object_block(X) do { \
  if (X != NULL) gt_pch_nx_object_block (X);\
  } while (0)
extern void gt_pch_nx_object_block (void *);
#define gt_pch_n_9reg_attrs(X) do { \
  if (X != NULL) gt_pch_nx_reg_attrs (X);\
  } while (0)
extern void gt_pch_nx_reg_attrs (void *);
#define gt_pch_n_9mem_attrs(X) do { \
  if (X != NULL) gt_pch_nx_mem_attrs (X);\
  } while (0)
extern void gt_pch_nx_mem_attrs (void *);
#define gt_pch_n_14bitmap_obstack(X) do { \
  if (X != NULL) gt_pch_nx_bitmap_obstack (X);\
  } while (0)
extern void gt_pch_nx_bitmap_obstack (void *);
#define gt_pch_n_18bitmap_element_def(X) do { \
  if (X != NULL) gt_pch_nx_bitmap_element_def (X);\
  } while (0)
extern void gt_pch_nx_bitmap_element_def (void *);
#define gt_pch_n_16machine_function(X) do { \
  if (X != NULL) gt_pch_nx_machine_function (X);\
  } while (0)
extern void gt_pch_nx_machine_function (void *);
#define gt_pch_n_17stack_local_entry(X) do { \
  if (X != NULL) gt_pch_nx_stack_local_entry (X);\
  } while (0)
extern void gt_pch_nx_stack_local_entry (void *);
#define gt_pch_n_15basic_block_def(X) do { \
  if (X != NULL) gt_pch_nx_basic_block_def (X);\
  } while (0)
extern void gt_pch_nx_basic_block_def (void *);
#define gt_pch_n_8edge_def(X) do { \
  if (X != NULL) gt_pch_nx_edge_def (X);\
  } while (0)
extern void gt_pch_nx_edge_def (void *);
#define gt_pch_n_17gimple_seq_node_d(X) do { \
  if (X != NULL) gt_pch_nx_gimple_seq_node_d (X);\
  } while (0)
extern void gt_pch_nx_gimple_seq_node_d (void *);
#define gt_pch_n_12gimple_seq_d(X) do { \
  if (X != NULL) gt_pch_nx_gimple_seq_d (X);\
  } while (0)
extern void gt_pch_nx_gimple_seq_d (void *);
#define gt_pch_n_7section(X) do { \
  if (X != NULL) gt_pch_nx_section (X);\
  } while (0)
extern void gt_pch_nx_section (void *);
#define gt_pch_n_18gimple_statement_d(X) do { \
  if (X != NULL) gt_pch_nx_gimple_statement_d (X);\
  } while (0)
extern void gt_pch_nx_gimple_statement_d (void *);
#define gt_pch_n_9rtvec_def(X) do { \
  if (X != NULL) gt_pch_nx_rtvec_def (X);\
  } while (0)
extern void gt_pch_nx_rtvec_def (void *);
#define gt_pch_n_7rtx_def(X) do { \
  if (X != NULL) gt_pch_nx_rtx_def (X);\
  } while (0)
extern void gt_pch_nx_rtx_def (void *);
#define gt_pch_n_15bitmap_head_def(X) do { \
  if (X != NULL) gt_pch_nx_bitmap_head_def (X);\
  } while (0)
extern void gt_pch_nx_bitmap_head_def (void *);
#define gt_pch_n_9tree_node(X) do { \
  if (X != NULL) gt_pch_nx_tree_node (X);\
  } while (0)
#define gt_pch_nx_tree_node gt_pch_nx_lang_tree_node
#define gt_pch_n_6answer(X) do { \
  if (X != NULL) gt_pch_nx_answer (X);\
  } while (0)
extern void gt_pch_nx_answer (void *);
#define gt_pch_n_9cpp_macro(X) do { \
  if (X != NULL) gt_pch_nx_cpp_macro (X);\
  } while (0)
extern void gt_pch_nx_cpp_macro (void *);
#define gt_pch_n_9cpp_token(X) do { \
  if (X != NULL) gt_pch_nx_cpp_token (X);\
  } while (0)
extern void gt_pch_nx_cpp_token (void *);
#define gt_pch_n_9line_maps(X) do { \
  if (X != NULL) gt_pch_nx_line_maps (X);\
  } while (0)
extern void gt_pch_nx_line_maps (void *);
extern void gt_pch_n_II17splay_tree_node_s (void *);
extern void gt_pch_n_SP9tree_node17splay_tree_node_s (void *);
extern void gt_pch_n_P9tree_nodeP9tree_node17splay_tree_node_s (void *);
extern void gt_pch_n_IP9tree_node17splay_tree_node_s (void *);
extern void gt_pch_n_P13tree_llvm_map4htab (void *);

void
gt_pch_n_P13tree_llvm_map4htab (void *x_p)
{
#ifdef GCC_PLUGIN_HAVE_PCH
  struct htab * const x = (struct htab *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_P13tree_llvm_map4htab, gt_e_P13tree_llvm_map4htab))
    {
      if ((*x).entries != NULL) {
        size_t i0;
        for (i0 = 0; i0 != (size_t)(((*x)).size); i0++) {
          gt_pch_n_13tree_llvm_map ((*x).entries[i0]);
        }
        gt_pch_note_object ((*x).entries, x, gt_pch_p_P13tree_llvm_map4htab, gt_types_enum_last);
      }
    }
/* end ifdef GCC_PLUGIN_HAVE_PCH*/
#endif
}
extern void gt_pch_n_P15interface_tuple4htab (void *);
extern void gt_pch_n_P16volatilized_type4htab (void *);
extern void gt_pch_n_P17string_descriptor4htab (void *);
extern void gt_pch_n_P14type_assertion4htab (void *);
extern void gt_pch_n_P18treetreehash_entry4htab (void *);
extern void gt_pch_n_P17module_htab_entry4htab (void *);
extern void gt_pch_n_P16def_pragma_macro4htab (void *);
extern void gt_pch_n_P21pending_abstract_type4htab (void *);
extern void gt_pch_n_P10spec_entry4htab (void *);
extern void gt_pch_n_P16cxx_int_tree_map4htab (void *);
extern void gt_pch_n_P17named_label_entry4htab (void *);
extern void gt_pch_n_P12tree_int_map4htab (void *);
extern void gt_pch_n_P19lto_symtab_decl_def4htab (void *);
extern void gt_pch_n_P25lto_symtab_identifier_def4htab (void *);
extern void gt_pch_n_IP9tree_node12splay_tree_s (void *);
extern void gt_pch_n_P9tree_nodeP9tree_node12splay_tree_s (void *);
extern void gt_pch_n_P12varpool_node4htab (void *);
extern void gt_pch_n_P13scev_info_str4htab (void *);
extern void gt_pch_n_P23constant_descriptor_rtx4htab (void *);
extern void gt_pch_n_P24constant_descriptor_tree4htab (void *);
extern void gt_pch_n_P12object_block4htab (void *);
extern void gt_pch_n_P7section4htab (void *);
extern void gt_pch_n_P17tree_priority_map4htab (void *);
extern void gt_pch_n_P8tree_map4htab (void *);
extern void gt_pch_n_P9type_hash4htab (void *);
extern void gt_pch_n_P13libfunc_entry4htab (void *);
extern void gt_pch_n_P23temp_slot_address_entry4htab (void *);
extern void gt_pch_n_P15throw_stmt_node4htab (void *);
extern void gt_pch_n_P9reg_attrs4htab (void *);
extern void gt_pch_n_P9mem_attrs4htab (void *);
extern void gt_pch_n_P7rtx_def4htab (void *);
extern void gt_pch_n_SP9tree_node12splay_tree_s (void *);
extern void gt_pch_n_P16var_loc_list_def4htab (void *);
extern void gt_pch_n_P10die_struct4htab (void *);
extern void gt_pch_n_P15dwarf_file_data4htab (void *);
extern void gt_pch_n_P20indirect_string_node4htab (void *);
extern void gt_pch_n_P11cgraph_node4htab (void *);
extern void gt_pch_n_II12splay_tree_s (void *);
extern void gt_pch_n_P27cgraph_node_set_element_def4htab (void *);
extern void gt_pch_n_P11cgraph_edge4htab (void *);
extern void gt_pch_n_P9loop_exit4htab (void *);
extern void gt_pch_n_P9tree_node4htab (void *);

/* Local pointer-walking routines.  */
extern void gt_pch_p_13tree_llvm_map
    (void *, void *, gt_pointer_operator, void *);

void
gt_pch_p_13tree_llvm_map (ATTRIBUTE_UNUSED void *this_obj,
	void *x_p,
	ATTRIBUTE_UNUSED gt_pointer_operator op,
	ATTRIBUTE_UNUSED void *cookie)
{
#ifdef GCC_PLUGIN_HAVE_PCH
  struct tree_llvm_map * const x ATTRIBUTE_UNUSED = (struct tree_llvm_map *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).base.from), cookie);
/* end ifdef GCC_PLUGIN_HAVE_PCH */
#endif
}
extern void gt_pch_p_15interface_tuple
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_16volatilized_type
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_17string_descriptor
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_15c_inline_static
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_24VEC_c_goto_bindings_p_gc
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_15c_goto_bindings
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_7c_scope
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_9c_binding
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_12c_label_vars
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_8c_parser
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_9imp_entry
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_16hashed_attribute
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_12hashed_entry
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_14type_assertion
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_18treetreehash_entry
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_5CPool
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_3JCF
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_17module_htab_entry
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_13binding_level
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_9opt_stack
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_16def_pragma_macro
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_22def_pragma_macro_value
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_11align_stack
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_18VEC_tree_gc_vec_gc
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_19VEC_const_char_p_gc
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_21pending_abstract_type
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_9cp_parser
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_17cp_parser_context
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_8cp_lexer
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_10tree_check
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_22VEC_deferred_access_gc
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_10spec_entry
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_16pending_template
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_21named_label_use_entry
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_28VEC_deferred_access_check_gc
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_11tinst_level
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_18sorted_fields_type
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_18VEC_tree_pair_s_gc
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_17named_label_entry
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_14cp_token_cache
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_11saved_scope
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_16cxx_int_tree_map
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_23VEC_cp_class_binding_gc
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_24VEC_cxx_saved_binding_gc
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_16cp_binding_level
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_11cxx_binding
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_15binding_entry_s
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_15binding_table_s
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_14VEC_tinfo_s_gc
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_18gnat_binding_level
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_9elab_info
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_10stmt_group
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_16VEC_parm_attr_gc
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_11parm_attr_d
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_19lto_symtab_decl_def
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_25lto_symtab_identifier_def
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_20ssa_operand_memory_d
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_13scev_info_str
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_13VEC_gimple_gc
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_9type_hash
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_16string_pool_data
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_13libfunc_entry
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_23temp_slot_address_entry
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_15throw_stmt_node
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_16VEC_eh_region_gc
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_11eh_region_d
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_16var_loc_list_def
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_12var_loc_node
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_20VEC_die_arg_entry_gc
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_16limbo_die_struct
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_20VEC_pubname_entry_gc
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_19VEC_dw_attr_node_gc
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_25dw_ranges_by_label_struct
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_16dw_ranges_struct
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_28dw_separate_line_info_struct
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_19dw_line_info_struct
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_25VEC_deferred_locations_gc
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_18dw_loc_list_struct
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_15dwarf_file_data
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_15queued_reg_save
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_20indirect_string_node
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_19dw_loc_descr_struct
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_13dw_fde_struct
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_13dw_cfi_struct
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_8typeinfo
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_22VEC_alias_set_entry_gc
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_17alias_set_entry_d
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_24constant_descriptor_tree
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_15cgraph_asm_node
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_12varpool_node
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_22VEC_cgraph_node_set_gc
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_19cgraph_node_set_def
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_27cgraph_node_set_element_def
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_22VEC_cgraph_node_ptr_gc
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_11cgraph_edge
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_24VEC_ipa_replace_map_p_gc
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_15ipa_replace_map
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_11cgraph_node
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_18VEC_basic_block_gc
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_14gimple_bb_info
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_11rtl_bb_info
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_11VEC_edge_gc
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_17cselib_val_struct
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_12elt_loc_list
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_13VEC_loop_p_gc
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_4loop
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_9loop_exit
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_13nb_iter_bound
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_17language_function
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_5loops
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_18control_flow_graph
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_9eh_status
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_20initial_value_struct
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_17rtx_constant_pool
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_18VEC_temp_slot_p_gc
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_9temp_slot
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_9gimple_df
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_23VEC_call_site_record_gc
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_18call_site_record_d
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_14sequence_stack
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_8elt_list
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_17tree_priority_map
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_12tree_int_map
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_8tree_map
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_14lang_tree_node
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_24tree_statement_list_node
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_9lang_decl
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_9lang_type
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_10die_struct
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_15varray_head_tag
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_12ptr_info_def
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_22VEC_constructor_elt_gc
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_10tree_ann_d
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_17VEC_alias_pair_gc
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_11VEC_tree_gc
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_8function
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_23constant_descriptor_rtx
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_11fixed_value
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_10real_value
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_10VEC_rtx_gc
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_12object_block
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_9reg_attrs
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_9mem_attrs
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_14bitmap_obstack
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_18bitmap_element_def
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_16machine_function
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_17stack_local_entry
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_15basic_block_def
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_8edge_def
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_17gimple_seq_node_d
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_12gimple_seq_d
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_7section
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_18gimple_statement_d
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_9rtvec_def
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_7rtx_def
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_15bitmap_head_def
    (void *, void *, gt_pointer_operator, void *);
#define gt_pch_p_9tree_node gt_pch_p_14lang_tree_node
extern void gt_pch_p_6answer
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_9cpp_macro
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_9cpp_token
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_9line_maps
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_II17splay_tree_node_s
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_SP9tree_node17splay_tree_node_s
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P9tree_nodeP9tree_node17splay_tree_node_s
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_IP9tree_node17splay_tree_node_s
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P13tree_llvm_map4htab
    (void *, void *, gt_pointer_operator, void *);

void
gt_pch_p_P13tree_llvm_map4htab (ATTRIBUTE_UNUSED void *this_obj,
	void *x_p,
	ATTRIBUTE_UNUSED gt_pointer_operator op,
	ATTRIBUTE_UNUSED void *cookie)
{
#ifdef GCC_PLUGIN_HAVE_PCH
  struct htab * const x ATTRIBUTE_UNUSED = (struct htab *)x_p;
  if ((*x).entries != NULL) {
    size_t i0;
    for (i0 = 0; i0 != (size_t)(((*x)).size); i0++) {
      if ((void *)((*x).entries) == this_obj)
        op (&((*x).entries[i0]), cookie);
    }
    if ((void *)(x) == this_obj)
      op (&((*x).entries), cookie);
  }
/* end ifdef GCC_PLUGIN_HAVE_PCH */
#endif
}
extern void gt_pch_p_P15interface_tuple4htab
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P16volatilized_type4htab
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P17string_descriptor4htab
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P14type_assertion4htab
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P18treetreehash_entry4htab
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P17module_htab_entry4htab
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P16def_pragma_macro4htab
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P21pending_abstract_type4htab
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P10spec_entry4htab
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P16cxx_int_tree_map4htab
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P17named_label_entry4htab
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P12tree_int_map4htab
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P19lto_symtab_decl_def4htab
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P25lto_symtab_identifier_def4htab
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_IP9tree_node12splay_tree_s
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P9tree_nodeP9tree_node12splay_tree_s
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P12varpool_node4htab
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P13scev_info_str4htab
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P23constant_descriptor_rtx4htab
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P24constant_descriptor_tree4htab
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P12object_block4htab
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P7section4htab
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P17tree_priority_map4htab
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P8tree_map4htab
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P9type_hash4htab
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P13libfunc_entry4htab
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P23temp_slot_address_entry4htab
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P15throw_stmt_node4htab
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P9reg_attrs4htab
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P9mem_attrs4htab
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P7rtx_def4htab
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_SP9tree_node12splay_tree_s
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P16var_loc_list_def4htab
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P10die_struct4htab
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P15dwarf_file_data4htab
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P20indirect_string_node4htab
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P11cgraph_node4htab
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_II12splay_tree_s
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P27cgraph_node_set_element_def4htab
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P11cgraph_edge4htab
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P9loop_exit4htab
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P9tree_node4htab
    (void *, void *, gt_pointer_operator, void *);

/* GC roots.  */

EXPORTED_CONST struct ggc_cache_tab gt_ggc_rc__gt_llvm_cache_h[] = {
  {
    &llvm_cache,
    1,
    sizeof (llvm_cache),
    &gt_ggc_mx_tree_llvm_map,
    &gt_pch_nx_tree_llvm_map,
    &tree_llvm_map_marked_p
  },
  LAST_GGC_CACHE_TAB
};

EXPORTED_CONST struct ggc_root_tab gt_pch_rc__gt_llvm_cache_h[] = {
  {
    &llvm_cache,
    1,
    sizeof (llvm_cache),
    &gt_ggc_m_P13tree_llvm_map4htab,
    &gt_pch_n_P13tree_llvm_map4htab
  },
  LAST_GGC_ROOT_TAB
};


void
gt_ggc_mx_tree_llvm_map (void *x_p)
{
  struct tree_llvm_map * const x = (struct tree_llvm_map *)x_p;
  if (ggc_test_and_set_mark (x))
    {
      gt_ggc_m_9tree_node ((*x).base.from);
    }
}

void
gt_pch_nx_tree_llvm_map (void *x_p)
{
#ifdef GCC_PLUGIN_HAVE_PCH
  struct tree_llvm_map * const x = (struct tree_llvm_map *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_13tree_llvm_map, gt_ggc_e_13tree_llvm_map))
    {
      gt_pch_n_9tree_node ((*x).base.from);
    }
/* end ifdef GCC_PLUGIN_HAVE_PCH*/
#endif
}
