re PR c++/82054 (ICE in add_dwarf_attr with -fopenmp and -g)

2017-08-31  Richard Biener  <rguenther@suse.de>

	PR middle-end/82054
	* dwarf2out.c (dwarf2out_early_global_decl): Process each
	function only once.

	* g++.dg/gomp/pr82054.C: New testcase.

From-SVN: r251559
This commit is contained in:
Richard Biener 2017-08-31 11:20:54 +00:00 committed by Richard Biener
parent cae83731bf
commit 7488b5779f
4 changed files with 38 additions and 5 deletions

View File

@ -1,3 +1,9 @@
2017-08-31 Richard Biener <rguenther@suse.de>
PR middle-end/82054
* dwarf2out.c (dwarf2out_early_global_decl): Process each
function only once.
2017-08-31 Tamar Christina <tamar.christina@arm.com>
* config/aarch64/aarch64-builtins.c (aarch64_init_simd_builtins):

View File

@ -25492,9 +25492,10 @@ dwarf2out_early_global_decl (tree decl)
if (TREE_CODE (decl) != TYPE_DECL
&& TREE_CODE (decl) != PARM_DECL)
{
tree save_fndecl = current_function_decl;
if (TREE_CODE (decl) == FUNCTION_DECL)
{
tree save_fndecl = current_function_decl;
/* For nested functions, make sure we have DIEs for the parents first
so that all nested DIEs are generated at the proper scope in the
first shot. */
@ -25521,11 +25522,19 @@ dwarf2out_early_global_decl (tree decl)
dwarf2out_decl (origin);
}
current_function_decl = decl;
/* Emit the DIE for decl but avoid doing that multiple times. */
dw_die_ref old_die;
if ((old_die = lookup_decl_die (decl)) == NULL
|| is_declaration_die (old_die))
{
current_function_decl = decl;
dwarf2out_decl (decl);
}
current_function_decl = save_fndecl;
}
dwarf2out_decl (decl);
if (TREE_CODE (decl) == FUNCTION_DECL)
current_function_decl = save_fndecl;
else
dwarf2out_decl (decl);
}
symtab->global_info_ready = save;
}

View File

@ -1,3 +1,8 @@
2017-08-31 Richard Biener <rguenther@suse.de>
PR middle-end/82054
* g++.dg/gomp/pr82054.C: New testcase.
2017-08-31 Renlin Li <renlin.li@arm.com>
Aaron Sawdey <acsawdey@linux.vnet.ibm.com>

View File

@ -0,0 +1,13 @@
// { dg-do compile }
// { dg-additional-options "-g" }
class a
{
bool b ();
};
bool
a::b ()
{
#pragma omp parallel
;
}