re PR debug/86523 (ICE in gen_member_die, at dwarf2out.c:24933 starting from r262560)

2018-07-18  Richard Biener  <rguenther@suse.de>

	PR debug/86523
	cp/
	* decl2.c (c_parse_final_cleanups): Call write_out_vars before
	start_static_storage_duration_function sets current_function_decl.

	* g++.dg/lto/pr86523-3_0.C: New testcase.

From-SVN: r262849
This commit is contained in:
Richard Biener 2018-07-18 06:54:23 +00:00 committed by Richard Biener
parent df6a7b9d37
commit 97f1323504
4 changed files with 38 additions and 3 deletions

View File

@ -1,3 +1,9 @@
2018-07-18 Richard Biener <rguenther@suse.de>
PR debug/86523
* decl2.c (c_parse_final_cleanups): Call write_out_vars before
start_static_storage_duration_function sets current_function_decl.
2018-07-17 Jason Merrill <jason@redhat.com>
PR c++/86480 - nested variadic lambda and constexpr if.

View File

@ -4754,14 +4754,14 @@ c_parse_final_cleanups (void)
inline, with resulting performance improvements. */
tree ssdf_body;
/* Make sure the back end knows about all the variables. */
write_out_vars (vars);
/* Set the line and file, so that it is obviously not from
the source file. */
input_location = locus_at_end_of_parsing;
ssdf_body = start_static_storage_duration_function (ssdf_count);
/* Make sure the back end knows about all the variables. */
write_out_vars (vars);
/* First generate code to do all the initializations. */
if (vars)
do_static_initialization_or_destruction (vars, /*initp=*/true);

View File

@ -1,3 +1,8 @@
2018-07-18 Richard Biener <rguenther@suse.de>
PR debug/86523
* g++.dg/lto/pr86523-3_0.C: New testcase.
2018-07-17 Andreas Schwab <schwab@linux-m68k.org>
* gcc.target/m68k/mulsi_highpart.c: New test.

View File

@ -0,0 +1,24 @@
// { dg-lto-do link }
// { dg-require-effective-target fpic }
// { dg-require-effective-target shared }
// { dg-lto-options { { -fPIC -flto -g -shared } } }
class a {
int b;
};
int const c = 0, d = 1, f = 2, g = 3;
struct B {
typedef a h;
h i;
};
template <class> B j();
template <class> struct k_context { static B const e_missingvar; };
template <class l> B const k_context<l>::e_missingvar = j<l>();
inline B m() {
switch (0) {
case c:
case d:
return k_context<int>::e_missingvar;
case f:
case g:;
}
}