diff options
author | Richard Biener <rguenther@suse.de> | 2014-02-04 14:53:24 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2014-02-04 14:53:24 +0000 |
commit | c39276b8d6b5046e860625202dbc94b8be5ce093 (patch) | |
tree | 24390526b3202113732fbbc802698a5f6e95ed74 /gcc/lto | |
parent | 3e247e586cb2b7cdc3519b3dddd1c50749a810ce (diff) | |
download | gcc-c39276b8d6b5046e860625202dbc94b8be5ce093.zip gcc-c39276b8d6b5046e860625202dbc94b8be5ce093.tar.gz gcc-c39276b8d6b5046e860625202dbc94b8be5ce093.tar.bz2 |
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
Diffstat (limited to 'gcc/lto')
-rw-r--r-- | gcc/lto/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/lto/lto.c | 10 |
2 files changed, 15 insertions, 1 deletions
diff --git a/gcc/lto/ChangeLog b/gcc/lto/ChangeLog index a0c1be1..437e97e 100644 --- a/gcc/lto/ChangeLog +++ b/gcc/lto/ChangeLog @@ -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 diff --git a/gcc/lto/lto.c b/gcc/lto/lto.c index c15f212..a769f25 100644 --- a/gcc/lto/lto.c +++ b/gcc/lto/lto.c @@ -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) |