aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2018-07-16 13:57:32 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2018-07-16 13:57:32 +0000
commit0150d9a1cd06feebd2e8efa56e364c8f377fb633 (patch)
tree044640fe0682e83a6c089fd66a1cf48dfef36b40
parentc4d0acf8f7af9c0ab1023b1e09cb17ae9b537204 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/dwarf2out.c2
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/g++.dg/lto/pr86523-1_0.C21
-rw-r--r--gcc/testsuite/g++.dg/lto/pr86523-2_0.C18
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;
+}