This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Fix LTO -g ICE (PR lto/65012)


Hi!

When building systemd with LTO and -g, we ICE, because we stream in
__PRETTY_FUNCTION__ VAR_DECL, which isn't referenced in the IL except for
BLOCK_VARS and thus doesn't get a varpool node streamed with it.
Later on when dwarf2out.c calls make_decl_rtl_for_debug on it, it creates
the varpool_node, but it has of course NULL lto_file_data, but
get_constructor assumes it isn't NULL.

Fixed thusly, bootstrapped/regtested on x86_64-linux, i686-linux and
aarch64-linux, tested it fixes systemd LTO -g build.
Acked by Honza privately on IRC, committed to trunk.

2015-02-19  Jakub Jelinek  <jakub@redhat.com>

	PR lto/65012
	* varpool.c (varpool_node::get_constructor): Return early
	if this->lto_file_data is NULL.

--- gcc/varpool.c.jj	2015-02-16 11:19:05.000000000 +0100
+++ gcc/varpool.c	2015-02-18 19:57:10.743001889 +0100
@@ -303,7 +303,8 @@ varpool_node::get_constructor (void)
   size_t len;
 
   if (DECL_INITIAL (decl) != error_mark_node
-      || !in_lto_p)
+      || !in_lto_p
+      || !lto_file_data)
     return DECL_INITIAL (decl);
 
   timevar_push (TV_IPA_LTO_CTORS_IN);

	Jakub


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]