From 5f673c6a1c5c18e8a7671d6b2ac130f637d9b23e Mon Sep 17 00:00:00 2001 From: Tobias Burnus Date: Wed, 4 Dec 2013 20:59:42 +0100 Subject: re PR debug/37132 (Debug: No DW_TAG_namelist emitted for NAMELISTS) gcc/ 2013-12-04 Tobias Burnus PR debug/37132 * lto-streamer.h (LTO_tags): Add LTO_namelist_decl_ref. * tree.def (NAMELIST_DECL): Add. * tree.h (NAMELIST_DECL_ASSOCIATED_DECL): New macro. * tree.c (initialize_tree_contains_struct): Add asserts for it. * dwarf2out.c (gen_namelist_decl): New function. (gen_decl_die, dwarf2out_decl): Call it. (dwarf2out_imported_module_or_decl_1): Handle NAMELIST_DECL. * lto-streamer-in.c (lto_input_tree_ref): Handle NAMELIST_DECL. (lto_input_tree_ref, lto_input_tree_1): Update lto_tag_check_range call. * lto-streamer-out.c (lto_output_tree_ref): Handle * NAMELIST_DECL. gcc/fortran 2013-12-04 Tobias Burnus PR debug/37132 * trans-decl.c (generate_namelist_decl, create_module_nml_decl): New static functions. (gfc_generate_module_vars, generate_local_vars): Call them. (gfc_trans_use_stmts): Handle namelists for debug genertion. From-SVN: r205679 --- gcc/lto-streamer-in.c | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) (limited to 'gcc/lto-streamer-in.c') diff --git a/gcc/lto-streamer-in.c b/gcc/lto-streamer-in.c index c5cb23c95d3..862e49d5a6a 100644 --- a/gcc/lto-streamer-in.c +++ b/gcc/lto-streamer-in.c @@ -204,7 +204,7 @@ lto_input_tree_ref (struct lto_input_block *ib, struct data_in *data_in, unsigned HOST_WIDE_INT ix_u; tree result = NULL_TREE; - lto_tag_check_range (tag, LTO_field_decl_ref, LTO_global_decl_ref); + lto_tag_check_range (tag, LTO_field_decl_ref, LTO_namelist_decl_ref); switch (tag) { @@ -248,6 +248,28 @@ lto_input_tree_ref (struct lto_input_block *ib, struct data_in *data_in, result = lto_file_decl_data_get_var_decl (data_in->file_data, ix_u); break; + case LTO_namelist_decl_ref: + { + tree tmp; + vec *nml_decls = NULL; + unsigned i, n; + + result = make_node (NAMELIST_DECL); + TREE_TYPE (result) = void_type_node; + DECL_NAME (result) = stream_read_tree (ib, data_in); + n = streamer_read_uhwi (ib); + for (i = 0; i < n; i++) + { + ix_u = streamer_read_uhwi (ib); + tmp = lto_file_decl_data_get_var_decl (data_in->file_data, ix_u); + gcc_assert (tmp != NULL_TREE); + CONSTRUCTOR_APPEND_ELT (nml_decls, NULL_TREE, tmp); + } + NAMELIST_DECL_ASSOCIATED_DECL (result) = build_constructor (NULL_TREE, + nml_decls); + break; + } + default: gcc_unreachable (); } @@ -1248,7 +1270,7 @@ lto_input_tree_1 (struct lto_input_block *ib, struct data_in *data_in, if (tag == LTO_null) result = NULL_TREE; - else if (tag >= LTO_field_decl_ref && tag <= LTO_global_decl_ref) + else if (tag >= LTO_field_decl_ref && tag <= LTO_namelist_decl_ref) { /* If TAG is a reference to an indexable tree, the next value in IB is the index into the table where we expect to find -- cgit v1.2.1