re PR ipa/65465 (Internal compiler error: in build2_stIat)
authorMartin Liska <marxin@gcc.gnu.org>
Thu, 19 Mar 2015 17:35:52 +0000 (17:35 +0000)
committerMartin Liska <marxin@gcc.gnu.org>
Thu, 19 Mar 2015 17:35:52 +0000 (17:35 +0000)
Fix for PR ipa/65465.

PR ipa/65465
* cgraphunit.c (cgraph_node::create_wrapper): Correctly reset
all fields of cgraph_thunk_info.
* g++.dg/ipa/pr65465.C: New test.

From-SVN: r221518

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

index d5e191ab7ed1aea0fa0a318229d4861beed8932c..86527011cea7c13d499e5a2e6c1c229fcf597fc6 100644 (file)
@@ -1,3 +1,9 @@
+2015-03-19  Martin Liska  <mliska@suse.cz>
+
+       PR ipa/65465
+       * cgraphunit.c (cgraph_node::create_wrapper): Correctly reset
+       all fields of cgraph_thunk_info.
+
 2015-03-19  Ilya Enkovich  <ilya.enkovich@intel.com>
 
        * ipa-chkp.c (chkp_maybe_create_clone): Don't try to
index e640907550d0fbe9107cbde5f4ee09dbe574de6e..8ac92e1c0c866052de77b5195a17685b5f6367e1 100644 (file)
@@ -2484,8 +2484,9 @@ cgraph_node::create_wrapper (cgraph_node *target)
 
   /* Turn alias into thunk and expand it into GIMPLE representation.  */
   definition = true;
+
+  memset (&thunk, 0, sizeof (cgraph_thunk_info));
   thunk.thunk_p = true;
-  thunk.this_adjusting = false;
   create_edge (target, NULL, count, CGRAPH_FREQ_BASE);
 
   tree arguments = DECL_ARGUMENTS (decl);
index b625d853287136a13edbf30a77cb0e14518a8fa7..92835db1f58a614b4e7b99f8a903bdff5d54c8d5 100644 (file)
@@ -1,3 +1,7 @@
+2015-03-19  Jakub Jelinek  <jakub@redhat.com>
+
+       * g++.dg/ipa/pr65465.C: New test.
+
 2015-03-19  Paolo Carlini  <paolo.carlini@oracle.com>
 
        PR c++/52659
diff --git a/gcc/testsuite/g++.dg/ipa/pr65465.C b/gcc/testsuite/g++.dg/ipa/pr65465.C
new file mode 100644 (file)
index 0000000..436d88f
--- /dev/null
@@ -0,0 +1,10 @@
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+struct A {};
+struct B { virtual A foo () const; };
+struct C { A foo () const; };
+struct D : virtual B { A foo () const {} };
+struct F : D { virtual int bar () const; };
+int F::bar () const { return 0; }
+A C::foo () const { return A (); }