Commit bf2dbec4 by Richard Biener Committed by Richard Biener

passes.c (rest_of_decl_compilation): Always call early_global_decl debug hook…

passes.c (rest_of_decl_compilation): Always call early_global_decl debug hook when we created a varpool node.

2015-09-17  Richard Biener  <rguenther@suse.de>

	* passes.c (rest_of_decl_compilation): Always call early_global_decl
	debug hook when we created a varpool node.
	* dwarf2out.c (dwarf2out_late_global_decl): When in LTO call
	dwarf2out_early_global_decl, when not just add location or
	value attributes to existing DIEs.

From-SVN: r227857
parent e3b5d7ba
2015-09-17 Richard Biener <rguenther@suse.de>
* passes.c (rest_of_decl_compilation): Always call early_global_decl
debug hook when we created a varpool node.
* dwarf2out.c (dwarf2out_late_global_decl): When in LTO call
dwarf2out_early_global_decl, when not just add location or
value attributes to existing DIEs.
2015-09-17 James Greenhalgh <james.greenhalgh@arm.com> 2015-09-17 James Greenhalgh <james.greenhalgh@arm.com>
* config/aarch64/aarch64.md (copysigndf3): New. * config/aarch64/aarch64.md (copysigndf3): New.
...@@ -21626,14 +21626,20 @@ dwarf2out_early_global_decl (tree decl) ...@@ -21626,14 +21626,20 @@ dwarf2out_early_global_decl (tree decl)
static void static void
dwarf2out_late_global_decl (tree decl) dwarf2out_late_global_decl (tree decl)
{ {
/* Output any global decls we missed or fill-in any location /* We have to generate early debug late for LTO. */
information we were unable to determine on the first pass. if (in_lto_p)
dwarf2out_early_global_decl (decl);
Skip over functions because they were handled by the /* Fill-in any location information we were unable to determine
debug_hooks->function_decl() call in rest_of_handle_final. */ on the first pass. */
if ((TREE_CODE (decl) != FUNCTION_DECL || !DECL_INITIAL (decl)) if (TREE_CODE (decl) == VAR_DECL
&& !POINTER_BOUNDS_P (decl)) && !POINTER_BOUNDS_P (decl))
dwarf2out_decl (decl); {
dw_die_ref die = lookup_decl_die (decl);
if (die)
add_location_or_const_value_attribute (die, decl, false,
DW_AT_location);
}
} }
/* Output debug information for type decl DECL. Called from toplev.c /* Output debug information for type decl DECL. Called from toplev.c
......
...@@ -318,7 +318,17 @@ rest_of_decl_compilation (tree decl, ...@@ -318,7 +318,17 @@ rest_of_decl_compilation (tree decl,
&& !decl_function_context (decl) && !decl_function_context (decl)
&& !current_function_decl && !current_function_decl
&& DECL_SOURCE_LOCATION (decl) != BUILTINS_LOCATION && DECL_SOURCE_LOCATION (decl) != BUILTINS_LOCATION
&& !decl_type_context (decl) && (!decl_type_context (decl)
/* If we created a varpool node for the decl make sure to
call early_global_decl. Otherwise we miss changes
introduced by member definitions like
struct A { static int staticdatamember; };
int A::staticdatamember;
and thus have incomplete early debug and late debug
called from varpool node removal fails to handle it
properly. */
|| (TREE_CODE (decl) == VAR_DECL
&& TREE_STATIC (decl) && !DECL_EXTERNAL (decl)))
/* Avoid confusing the debug information machinery when there are /* Avoid confusing the debug information machinery when there are
errors. */ errors. */
&& !seen_error ()) && !seen_error ())
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment