From 14fac4364c49414c386efe334533740555bfdf41 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Mon, 26 Nov 2018 22:24:00 +0100 Subject: [PATCH] re PR c++/86900 (-gdwarf-5 -O2 -ffunction-sections = assembler error) PR c++/86900 * dwarf2out.c (secname_for_decl): For functions with DECL_SECTION_NAME if in_cold_section_p, try to return current_function_section's name if it is a named section. * g++.dg/debug/dwarf2/pr86900.C: New test. From-SVN: r266485 --- gcc/ChangeLog | 7 +++++++ gcc/dwarf2out.c | 10 +++++++++- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/debug/dwarf2/pr86900.C | 14 ++++++++++++++ 4 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/pr86900.C diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a4d60791c28..42f2ff059e3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2018-11-26 Jakub Jelinek + + PR c++/86900 + * dwarf2out.c (secname_for_decl): For functions with + DECL_SECTION_NAME if in_cold_section_p, try to return + current_function_section's name if it is a named section. + 2018-11-26 Maya Rashish PR target/58397 diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 9933650e33b..8b64c8769cd 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -16742,7 +16742,15 @@ secname_for_decl (const_tree decl) && DECL_SECTION_NAME (decl)) secname = DECL_SECTION_NAME (decl); else if (current_function_decl && DECL_SECTION_NAME (current_function_decl)) - secname = DECL_SECTION_NAME (current_function_decl); + { + if (in_cold_section_p) + { + section *sec = current_function_section (); + if (sec->common.flags & SECTION_NAMED) + return sec->named.name; + } + secname = DECL_SECTION_NAME (current_function_decl); + } else if (cfun && in_cold_section_p) secname = crtl->subsections.cold_section_label; else diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ef9ad1db551..7d65607b138 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2018-11-26 Jakub Jelinek + + PR c++/86900 + * g++.dg/debug/dwarf2/pr86900.C: New test. + 2018-11-26 Jozef Lawrynowicz * gcc.c-torture/compile/20151204.c: Add dg-require-effective-target diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/pr86900.C b/gcc/testsuite/g++.dg/debug/dwarf2/pr86900.C new file mode 100644 index 00000000000..6250f0644d6 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/pr86900.C @@ -0,0 +1,14 @@ +// PR c++/86900 +// { dg-do assemble { target function_sections } } +// { dg-options "-O2 -gdwarf-5 -ffunction-sections" } + +struct A; +struct B { B (A); }; +struct A { A (int); ~A (); }; + +void +foo (int x) +{ + A d(0); + B e(d); +} -- 2.30.2