static void lto_input_ts_translation_unit_decl_tree_pointers (struct lto_input_block *ib, struct data_in *data_in, tree expr) { TRANSLATION_UNIT_LANGUAGE (expr) = xstrdup (streamer_read_string (data_in, ib)); VEC_safe_push (tree, gc, all_translation_units, expr); }
tree streamer_get_builtin_tree (struct lto_input_block *ib, struct data_in *data_in) { enum built_in_class fclass; enum built_in_function fcode; const char *asmname; tree result; fclass = streamer_read_enum (ib, built_in_class, BUILT_IN_LAST); gcc_assert (fclass == BUILT_IN_NORMAL || fclass == BUILT_IN_MD); fcode = (enum built_in_function) streamer_read_uhwi (ib); if (fclass == BUILT_IN_NORMAL) { if (fcode >= END_BUILTINS) fatal_error (input_location, "machine independent builtin code out of range"); result = builtin_decl_explicit (fcode); if (!result) { if (fcode > BEGIN_CHKP_BUILTINS && fcode < END_CHKP_BUILTINS) { fcode = (enum built_in_function) (fcode - BEGIN_CHKP_BUILTINS - 1); result = builtin_decl_explicit (fcode); result = chkp_maybe_clone_builtin_fndecl (result); } else if (fcode > BEGIN_SANITIZER_BUILTINS && fcode < END_SANITIZER_BUILTINS) { initialize_sanitizer_builtins (); result = builtin_decl_explicit (fcode); } } gcc_assert (result); } else if (fclass == BUILT_IN_MD) { result = targetm.builtin_decl (fcode, true); if (!result || result == error_mark_node) fatal_error (input_location, "target specific builtin not available"); } else gcc_unreachable (); asmname = streamer_read_string (data_in, ib); if (asmname) set_builtin_user_assembler_name (result, asmname); streamer_tree_cache_append (data_in->reader_cache, result, 0); return result; }