diff options
Diffstat (limited to 'gcc/lto-streamer-in.c')
-rw-r--r-- | gcc/lto-streamer-in.c | 26 |
1 files changed, 24 insertions, 2 deletions
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<constructor_elt, va_gc> *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 |