aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAldy Hernandez <aldyh@redhat.com>2012-01-24 16:47:24 +0000
committerAldy Hernandez <aldyh@gcc.gnu.org>2012-01-24 16:47:24 +0000
commit00a42fb364bba1a8cea3e36c15969d7fbc10a1fe (patch)
tree3c7bc3da2e660f5533682e3c03591f4239c30c61 /gcc
parent1aa5d1c74aa0ed61c1d3e4067dd291efa41b1cf8 (diff)
downloadgcc-00a42fb364bba1a8cea3e36c15969d7fbc10a1fe.zip
gcc-00a42fb364bba1a8cea3e36c15969d7fbc10a1fe.tar.gz
gcc-00a42fb364bba1a8cea3e36c15969d7fbc10a1fe.tar.bz2
+ PR c++/51928 + * class.c (set_method_tm_attributes): Use TARGET_THUNK instead...
+ PR c++/51928 + * class.c (set_method_tm_attributes): Use TARGET_THUNK instead of + thunk for set_one_vmethod_tm_attributes. Co-Authored-By: Patrick Marlier <patrick.marlier@gmail.com> From-SVN: r183478
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog7
-rw-r--r--gcc/cp/class.c7
-rw-r--r--gcc/testsuite/g++.dg/tm/pr51928.C16
3 files changed, 29 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 9eb975d..6dbb433 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,10 @@
+2012-01-24 Aldy Hernandez <aldyh@redhat.com>
+ Patrick Marlier <patrick.marlier@gmail.com>
+
+ PR c++/51928
+ * class.c (set_method_tm_attributes): Use TARGET_THUNK instead of
+ thunk for set_one_vmethod_tm_attributes.
+
2012-01-24 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/51223
diff --git a/gcc/cp/class.c b/gcc/cp/class.c
index d654b76..35e0864 100644
--- a/gcc/cp/class.c
+++ b/gcc/cp/class.c
@@ -4430,7 +4430,12 @@ set_method_tm_attributes (tree t)
tree vchain;
for (vchain = BINFO_VIRTUALS (TYPE_BINFO (t)); vchain;
vchain = TREE_CHAIN (vchain))
- set_one_vmethod_tm_attributes (t, BV_FN (vchain));
+ {
+ fndecl = BV_FN (vchain);
+ if (DECL_THUNK_P (fndecl))
+ fndecl = THUNK_TARGET (fndecl);
+ set_one_vmethod_tm_attributes (t, fndecl);
+ }
}
/* If the class doesn't have an attribute, nothing more to do. */
diff --git a/gcc/testsuite/g++.dg/tm/pr51928.C b/gcc/testsuite/g++.dg/tm/pr51928.C
new file mode 100644
index 0000000..22dbadd
--- /dev/null
+++ b/gcc/testsuite/g++.dg/tm/pr51928.C
@@ -0,0 +1,16 @@
+/* { dg-do compile } */
+/* { dg-options "-fgnu-tm" } */
+
+struct A; // { dg-error "forward declaration of 'struct A'" }
+
+struct B
+{
+ virtual B* foo(A);
+};
+
+struct C : virtual B
+{
+ virtual C* foo(A) { return 0; } // { dg-error "'<anonymous>' has incomplete type" }
+};
+
+C c;