diff options
author | Jason Merrill <jason@redhat.com> | 2012-11-14 20:53:37 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2012-11-14 20:53:37 -0500 |
commit | d3061adb7fc27794f434d688e72669f45097ae82 (patch) | |
tree | ed887803eac4ff793a67dab2e4942a835b9efc88 | |
parent | 4fce678f8afd3d667becf67576b7d88d07670805 (diff) | |
download | gcc-d3061adb7fc27794f434d688e72669f45097ae82.zip gcc-d3061adb7fc27794f434d688e72669f45097ae82.tar.gz gcc-d3061adb7fc27794f434d688e72669f45097ae82.tar.bz2 |
class.c (finish_struct_1): Check virtual functions for missing ABI tags.
* class.c (finish_struct_1): Check virtual functions
for missing ABI tags.
From-SVN: r193525
-rw-r--r-- | gcc/cp/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/cp/class.c | 6 | ||||
-rw-r--r-- | gcc/doc/extend.texi | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/abi/abi-tag4.C | 8 |
4 files changed, 18 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index bb5e4ba..af55e29 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 2012-11-13 Jason Merrill <jason@redhat.com> + * class.c (finish_struct_1): Check virtual functions + for missing ABI tags. + PR c++/55275 * pt.c (maybe_process_partial_specialization): Update DECL_SOURCE_LOCATION for new specializations. diff --git a/gcc/cp/class.c b/gcc/cp/class.c index 0665e90..cdc02ae 100644 --- a/gcc/cp/class.c +++ b/gcc/cp/class.c @@ -6275,6 +6275,12 @@ finish_struct_1 (tree t) /* Here we know enough to change the type of our virtual function table, but we will wait until later this function. */ build_primary_vtable (CLASSTYPE_PRIMARY_BINFO (t), t); + + /* If we're warning about ABI tags, check the types of the new + virtual functions. */ + if (warn_abi_tag) + for (tree v = virtuals; v; v = TREE_CHAIN (v)) + check_abi_tags (t, TREE_VALUE (v)); } if (TYPE_CONTAINS_VPTR_P (t)) diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index 25dd685..43b21c6 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -15622,7 +15622,7 @@ A redeclaration of a function or class must not add new ABI tags, since doing so would change the mangled name. The @option{-Wabi-tag} flag enables a warning about a class which does -not have all the ABI tags used by its subobjects; for users with code +not have all the ABI tags used by its subobjects and virtual functions; for users with code that needs to coexist with an earlier ABI, using this option can help to find all affected types that need to be tagged. diff --git a/gcc/testsuite/g++.dg/abi/abi-tag4.C b/gcc/testsuite/g++.dg/abi/abi-tag4.C new file mode 100644 index 0000000..3f8d7bf --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/abi-tag4.C @@ -0,0 +1,8 @@ +// { dg-options "-Wabi-tag" } + +struct __attribute ((abi_tag ("X"))) A { }; + +struct B // { dg-warning "abi tag" } +{ + virtual void f(A); // { dg-message "declared here" } +}; |