From: Richard Biener Date: Wed, 18 Jul 2018 06:54:23 +0000 (+0000) Subject: re PR debug/86523 (ICE in gen_member_die, at dwarf2out.c:24933 starting from r262560) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=97f132350479327123dc157b66c8a2a2fddeacfd;p=gcc.git re PR debug/86523 (ICE in gen_member_die, at dwarf2out.c:24933 starting from r262560) 2018-07-18 Richard Biener 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 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index f6f43985125..7161565280a 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2018-07-18 Richard Biener + + 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 PR c++/86480 - nested variadic lambda and constexpr if. diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index f8fc20e4093..d67ced097da 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -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); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b09943993dd..7fc2a42fbce 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2018-07-18 Richard Biener + + PR debug/86523 + * g++.dg/lto/pr86523-3_0.C: New testcase. + 2018-07-17 Andreas Schwab * gcc.target/m68k/mulsi_highpart.c: New test. diff --git a/gcc/testsuite/g++.dg/lto/pr86523-3_0.C b/gcc/testsuite/g++.dg/lto/pr86523-3_0.C new file mode 100644 index 00000000000..31063b8773a --- /dev/null +++ b/gcc/testsuite/g++.dg/lto/pr86523-3_0.C @@ -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 B j(); +template struct k_context { static B const e_missingvar; }; +template B const k_context::e_missingvar = j(); +inline B m() { + switch (0) { + case c: + case d: + return k_context::e_missingvar; + case f: + case g:; + } +}