aboutsummaryrefslogtreecommitdiff
path: root/gcc/lto
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2014-02-04 14:53:24 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2014-02-04 14:53:24 +0000
commitc39276b8d6b5046e860625202dbc94b8be5ce093 (patch)
tree24390526b3202113732fbbc802698a5f6e95ed74 /gcc/lto
parent3e247e586cb2b7cdc3519b3dddd1c50749a810ce (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/lto/lto.c10
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)