aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2018-10-10 22:54:04 +0000
committerEric Botcazou <ebotcazou@gcc.gnu.org>2018-10-10 22:54:04 +0000
commita1a0e08d63b3b1d68e2e270f4c62b8d4c4ae2640 (patch)
tree43750fb46850413cd9c01b9ce3f9623a2d05531f
parent8e9558f029123e00008d3ef464922128d018f0fc (diff)
downloadgcc-a1a0e08d63b3b1d68e2e270f4c62b8d4c4ae2640.zip
gcc-a1a0e08d63b3b1d68e2e270f4c62b8d4c4ae2640.tar.gz
gcc-a1a0e08d63b3b1d68e2e270f4c62b8d4c4ae2640.tar.bz2
re PR middle-end/87574 (ICE in add_data_member_location_attribute at gcc/gcc/dwarf2out.c:19226 since r264943)
PR middle-end/87574 * cgraphunit.c (cgraph_node::expand_thunk): Force DECL_IGNORED_P on the thunk when expanding to GIMPLE. From-SVN: r265028
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/cgraphunit.c6
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/g++.dg/other/pr87574.C33
4 files changed, 49 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 81171be..3ee20df 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2018-10-10 Eric Botcazou <ebotcazou@adacore.com>
+
+ PR middle-end/87574
+ * cgraphunit.c (cgraph_node::expand_thunk): Force DECL_IGNORED_P on
+ the thunk when expanding to GIMPLE.
+
2018-10-10 Bernd Edlinger <bernd.edlinger@hotmail.de>
* varasm.c (mergeable_string_section): Don't try to move zero-length
diff --git a/gcc/cgraphunit.c b/gcc/cgraphunit.c
index 5176cd1..cb84954 100644
--- a/gcc/cgraphunit.c
+++ b/gcc/cgraphunit.c
@@ -1862,6 +1862,12 @@ cgraph_node::expand_thunk (bool output_asm_thunks, bool force_gimple_thunk)
DECL_ARGUMENTS. In this case force_gimple_thunk is true. */
if (in_lto_p && !force_gimple_thunk)
get_untransformed_body ();
+
+ /* We need to force DECL_IGNORED_P when the thunk is created
+ after early debug was run. */
+ if (force_gimple_thunk)
+ DECL_IGNORED_P (thunk_fndecl) = 1;
+
a = DECL_ARGUMENTS (thunk_fndecl);
current_function_decl = thunk_fndecl;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 5c75174..05dab1f 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2018-10-10 Eric Botcazou <ebotcazou@adacore.com>
+
+ * g++.dg/other/pr87574.C: New test.
+
2018-10-10 Marek Polacek <polacek@redhat.com>
PR c++/87567 - constexpr rejects call to non-constexpr function.
diff --git a/gcc/testsuite/g++.dg/other/pr87574.C b/gcc/testsuite/g++.dg/other/pr87574.C
new file mode 100644
index 0000000..190e386
--- /dev/null
+++ b/gcc/testsuite/g++.dg/other/pr87574.C
@@ -0,0 +1,33 @@
+// PR middle-end/87574
+// Testcase by David Binderman <dcb314@hotmail.com>
+
+// { dg-do compile }
+// { dg-options "-O2 -g -Wno-return-type" }
+
+class a {
+public:
+ virtual ~a();
+};
+class c {
+public:
+ enum j {};
+ virtual j d() = 0;
+};
+class e : a, c {
+ j d();
+};
+class f;
+class g {
+public:
+ static g *h();
+ f *i();
+};
+class f {
+public:
+ template <class b> b *l(int);
+};
+c::j e::d() {}
+void m() {
+ for (int k;;)
+ g::h()->i()->l<c>(k)->d();
+}