Fix PR middle-end/87574

Message ID 2088304.ITDu5v2iMG@polaris
State New
Headers show
Series
  • Fix PR middle-end/87574
Related show

Commit Message

Eric Botcazou Oct. 10, 2018, 10:54 p.m.
It turns out that, even if cgraph_node::expand_thunk happily overrides the 
DECL_IGNORED_P setting on the thunk from the front-end, this is necessary when 
the thunk is initially a back-end thunk and then turned into a GIMPLE thunk, 
e.g. because of inlining, to play nice with early debug info generation.

So the patch reinstates the overriding, but only when expanding to GIMPLE.

Tested on x86-64/Linux, applied on the mainline as obvious.


2018-10-10  Eric Botcazou  <ebotcazou@adacore.com>

	PR middle-end/87574
	* cgraphunit.c (cgraph_node::expand_thunk): Force DECL_IGNORED_P on
	the thunk when expanding to GIMPLE.


2018-10-10  Eric Botcazou  <ebotcazou@adacore.com>

	* g++.dg/other/pr87574.C: New test.

Patch

Index: cgraphunit.c
===================================================================
--- cgraphunit.c	(revision 264986)
+++ cgraphunit.c	(working copy)
@@ -1862,6 +1862,12 @@  cgraph_node::expand_thunk (bool output_a
 	 DECL_ARGUMENTS.  In this case force_gimple_thunk is true.  */
       if (in_lto_p && !force_gimple_thunk)
 	get_untransformed_body ();
+
+      /* We need to force DECL_IGNORED_P when the thunk is created
+	 after early debug was run.  */
+      if (force_gimple_thunk)
+	DECL_IGNORED_P (thunk_fndecl) = 1;
+
       a = DECL_ARGUMENTS (thunk_fndecl);
 
       current_function_decl = thunk_fndecl;