diff options
author | Richard Biener <rguenther@suse.de> | 2018-07-16 13:57:32 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2018-07-16 13:57:32 +0000 |
commit | 0150d9a1cd06feebd2e8efa56e364c8f377fb633 (patch) | |
tree | 044640fe0682e83a6c089fd66a1cf48dfef36b40 | |
parent | c4d0acf8f7af9c0ab1023b1e09cb17ae9b537204 (diff) | |
download | gcc-0150d9a1cd06feebd2e8efa56e364c8f377fb633.zip gcc-0150d9a1cd06feebd2e8efa56e364c8f377fb633.tar.gz gcc-0150d9a1cd06feebd2e8efa56e364c8f377fb633.tar.bz2 |
re PR debug/86523 (ICE in gen_member_die, at dwarf2out.c:24933 starting from r262560)
2018-07-16 Richard Biener <rguenther@suse.de>
PR lto/86523
* dwarf2out.c (dwarf2out_register_external_die): Assign DIE parents
for function-local FUNCTION_DECL and RESULT_DECL immediately.
* g++.dg/lto/pr86523-1_0.C: New testcase.
* g++.dg/lto/pr86523-2_0.C: Likewise.
From-SVN: r262696
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/dwarf2out.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/lto/pr86523-1_0.C | 21 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/lto/pr86523-2_0.C | 18 |
5 files changed, 53 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 41ea59b..974168c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2018-07-16 Richard Biener <rguenther@suse.de> + + PR lto/86523 + * dwarf2out.c (dwarf2out_register_external_die): Assign DIE parents + for function-local FUNCTION_DECL and RESULT_DECL immediately. + 2018-07-16 Martin Liska <mliska@suse.cz> PR ipa/86529 diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index ba5c63e..1e33cf0 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -5959,7 +5959,9 @@ dwarf2out_register_external_die (tree decl, const char *sym, imports the original CUs. */ parent = comp_unit_die (); else if (TREE_CODE (ctx) == FUNCTION_DECL + && TREE_CODE (decl) != FUNCTION_DECL && TREE_CODE (decl) != PARM_DECL + && TREE_CODE (decl) != RESULT_DECL && TREE_CODE (decl) != BLOCK) /* Leave function local entities parent determination to when we process scope vars. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a4053c9..57c5997 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2018-07-16 Richard Biener <rguenther@suse.de> + + PR lto/86523 + * g++.dg/lto/pr86523-1_0.C: New testcase. + * g++.dg/lto/pr86523-2_0.C: Likewise. + 2018-07-16 Martin Liska <mliska@suse.cz> PR ipa/86529 diff --git a/gcc/testsuite/g++.dg/lto/pr86523-1_0.C b/gcc/testsuite/g++.dg/lto/pr86523-1_0.C new file mode 100644 index 0000000..3f75cdd --- /dev/null +++ b/gcc/testsuite/g++.dg/lto/pr86523-1_0.C @@ -0,0 +1,21 @@ +// { dg-lto-do link } +// { dg-lto-options {{-O2 -flto -g -shared}} } +namespace { + class a typedef b; + class a {}; +} // namespace +class c { + struct C { + b d; + }; + C e() const; +}; +c::C c::e() const { + C g; + struct h { + C g; + h(C *) {} + } f(&g); + return g; +} + diff --git a/gcc/testsuite/g++.dg/lto/pr86523-2_0.C b/gcc/testsuite/g++.dg/lto/pr86523-2_0.C new file mode 100644 index 0000000..f156230 --- /dev/null +++ b/gcc/testsuite/g++.dg/lto/pr86523-2_0.C @@ -0,0 +1,18 @@ +// { dg-lto-do link } +// { dg-lto-options {{-O2 -flto -g -shared}} } +class a typedef b; +class a {}; +class c { + struct C { + b d; + }; + C e() const; +}; +c::C c::e() const { + C g; + struct h { + C g; + h(C *) {} + } f(&g); + return g; +} |