re PR lto/59723 (ICE: in lto_output_tree, at lto-streamer-out.c:1390 when compiling some Fortran tests with -flto)
2014-02-04 Richard Biener <rguenther@suse.de> PR lto/59723 * lto-streamer-out.c (tree_is_indexable): Force NAMELIST_DECLs in function context local. (lto_output_tree_ref): Do not write trees from lto_output_tree_ref. * lto-streamer-in.c (lto_input_tree_ref): Handle LTO_namelist_decl_ref similar to LTO_imported_decl_ref. lto/ * lto.c (mentions_vars_p): Handle NAMELIST_DECL. (lto_fixup_prevailing_decls): Handle fixing up CONSTRUCTOR values. From-SVN: r207471
This commit is contained in:
parent
3e247e586c
commit
c39276b8d6
|
@ -1,3 +1,12 @@
|
|||
2014-02-04 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR lto/59723
|
||||
* lto-streamer-out.c (tree_is_indexable): Force NAMELIST_DECLs
|
||||
in function context local.
|
||||
(lto_output_tree_ref): Do not write trees from lto_output_tree_ref.
|
||||
* lto-streamer-in.c (lto_input_tree_ref): Handle LTO_namelist_decl_ref
|
||||
similar to LTO_imported_decl_ref.
|
||||
|
||||
2014-02-04 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR tree-optimization/60002
|
||||
|
|
|
@ -244,32 +244,11 @@ lto_input_tree_ref (struct lto_input_block *ib, struct data_in *data_in,
|
|||
case LTO_imported_decl_ref:
|
||||
case LTO_label_decl_ref:
|
||||
case LTO_translation_unit_decl_ref:
|
||||
case LTO_namelist_decl_ref:
|
||||
ix_u = streamer_read_uhwi (ib);
|
||||
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 ();
|
||||
}
|
||||
|
|
|
@ -139,7 +139,8 @@ tree_is_indexable (tree t)
|
|||
return variably_modified_type_p (TREE_TYPE (DECL_CONTEXT (t)), NULL_TREE);
|
||||
else if (((TREE_CODE (t) == VAR_DECL && !TREE_STATIC (t))
|
||||
|| TREE_CODE (t) == TYPE_DECL
|
||||
|| TREE_CODE (t) == CONST_DECL)
|
||||
|| TREE_CODE (t) == CONST_DECL
|
||||
|| TREE_CODE (t) == NAMELIST_DECL)
|
||||
&& decl_function_context (t))
|
||||
return false;
|
||||
else if (TREE_CODE (t) == DEBUG_EXPR_DECL)
|
||||
|
@ -255,19 +256,9 @@ lto_output_tree_ref (struct output_block *ob, tree expr)
|
|||
break;
|
||||
|
||||
case NAMELIST_DECL:
|
||||
{
|
||||
unsigned i;
|
||||
tree value, tmp;
|
||||
|
||||
streamer_write_record_start (ob, LTO_namelist_decl_ref);
|
||||
stream_write_tree (ob, DECL_NAME (expr), true);
|
||||
tmp = NAMELIST_DECL_ASSOCIATED_DECL (expr);
|
||||
gcc_assert (tmp != NULL_TREE);
|
||||
streamer_write_uhwi (ob, CONSTRUCTOR_ELTS (tmp)->length());
|
||||
FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (tmp), i, value)
|
||||
lto_output_var_decl_index (ob->decl_state, ob->main_stream, value);
|
||||
break;
|
||||
}
|
||||
streamer_write_record_start (ob, LTO_namelist_decl_ref);
|
||||
lto_output_var_decl_index (ob->decl_state, ob->main_stream, expr);
|
||||
break;
|
||||
|
||||
case NAMESPACE_DECL:
|
||||
streamer_write_record_start (ob, LTO_namespace_decl_ref);
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
2014-02-04 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR lto/59723
|
||||
* lto.c (mentions_vars_p): Handle NAMELIST_DECL.
|
||||
(lto_fixup_prevailing_decls): Handle fixing up CONSTRUCTOR values.
|
||||
|
||||
2014-02-04 Jan Hubicka <hubicka@ucw.cz>
|
||||
Markus Trippelsdorf
|
||||
|
||||
|
|
|
@ -926,6 +926,7 @@ mentions_vars_p (tree t)
|
|||
case RESULT_DECL:
|
||||
case IMPORTED_DECL:
|
||||
case NAMESPACE_DECL:
|
||||
case NAMELIST_DECL:
|
||||
return mentions_vars_p_decl_common (t);
|
||||
|
||||
case VAR_DECL:
|
||||
|
@ -2597,7 +2598,7 @@ lto_fixup_prevailing_decls (tree t)
|
|||
enum tree_code code = TREE_CODE (t);
|
||||
bool fixed = false;
|
||||
|
||||
gcc_checking_assert (code != CONSTRUCTOR && code != TREE_BINFO);
|
||||
gcc_checking_assert (code != TREE_BINFO);
|
||||
LTO_NO_PREVAIL (TREE_TYPE (t));
|
||||
if (CODE_CONTAINS_STRUCT (code, TS_COMMON))
|
||||
LTO_NO_PREVAIL (TREE_CHAIN (t));
|
||||
|
@ -2659,6 +2660,13 @@ lto_fixup_prevailing_decls (tree t)
|
|||
for (i = TREE_OPERAND_LENGTH (t) - 1; i >= 0; --i)
|
||||
LTO_SET_PREVAIL (TREE_OPERAND (t, i));
|
||||
}
|
||||
else if (TREE_CODE (t) == CONSTRUCTOR)
|
||||
{
|
||||
unsigned i;
|
||||
tree val;
|
||||
FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (t), i, val)
|
||||
LTO_SET_PREVAIL (val);
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (code)
|
||||
|
|
Loading…
Reference in New Issue