diff options
author | Aldy Hernandez <aldyh@redhat.com> | 2012-01-24 16:47:24 +0000 |
---|---|---|
committer | Aldy Hernandez <aldyh@gcc.gnu.org> | 2012-01-24 16:47:24 +0000 |
commit | 00a42fb364bba1a8cea3e36c15969d7fbc10a1fe (patch) | |
tree | 3c7bc3da2e660f5533682e3c03591f4239c30c61 /gcc | |
parent | 1aa5d1c74aa0ed61c1d3e4067dd291efa41b1cf8 (diff) | |
download | gcc-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/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/cp/class.c | 7 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/tm/pr51928.C | 16 |
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; |