re PR middle-end/87574 (ICE in add_data_member_location_attribute at gcc/gcc/dwarf2ou...
authorEric Botcazou <ebotcazou@adacore.com>
Wed, 10 Oct 2018 22:54:04 +0000 (22:54 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Wed, 10 Oct 2018 22:54:04 +0000 (22:54 +0000)
PR middle-end/87574
* cgraphunit.c (cgraph_node::expand_thunk): Force DECL_IGNORED_P on
the thunk when expanding to GIMPLE.

From-SVN: r265028

gcc/ChangeLog
gcc/cgraphunit.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/other/pr87574.C [new file with mode: 0644]

index 81171bedf334463d1ca18d99b39be46f9431aa73..3ee20df669ca46584ce13551e9b57a0a570e714b 100644 (file)
@@ -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
index 5176cd1f1ffa375b4b3caeeefa43e14986d2b993..cb8495417b50a74e914af61581c9843c1100c1f4 100644 (file)
@@ -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;
index 5c751749491b3e2a3321051f2d12cba3c2c1e2a2..05dab1f46a7a5e548485642a962cdf2d6635fe13 100644 (file)
@@ -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 (file)
index 0000000..190e386
--- /dev/null
@@ -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();
+}