diff options
author | Marek Polacek <polacek@redhat.com> | 2024-09-05 13:01:59 -0400 |
---|---|---|
committer | Marek Polacek <polacek@redhat.com> | 2024-09-05 15:21:47 -0400 |
commit | d9d34f9a91371dea4bab0b54b2d7f762a6cc23e0 (patch) | |
tree | 791d884f688fdf693a90b3f4a6785aa5e92546d5 | |
parent | 7d1483921941d21d91f929ef0d59a9794b1946b4 (diff) | |
download | gcc-d9d34f9a91371dea4bab0b54b2d7f762a6cc23e0.zip gcc-d9d34f9a91371dea4bab0b54b2d7f762a6cc23e0.tar.gz gcc-d9d34f9a91371dea4bab0b54b2d7f762a6cc23e0.tar.bz2 |
c++: vtable referring to "unavailable" virtual fn [PR116606]
mark_vtable_entries already has
/* It's OK for the vtable to refer to deprecated virtual functions. */
warning_sentinel w(warn_deprecated_decl);
but that doesn't cover __attribute__((unavailable)). We can use the
following override to cover both.
PR c++/116606
gcc/cp/ChangeLog:
* decl2.cc (mark_vtable_entries): Temporarily override deprecated_state to
UNAVAILABLE_DEPRECATED_SUPPRESS. Remove a warning_sentinel.
gcc/testsuite/ChangeLog:
* g++.dg/ext/attr-unavailable-13.C: New test.
-rw-r--r-- | gcc/cp/decl2.cc | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/ext/attr-unavailable-13.C | 8 |
2 files changed, 10 insertions, 1 deletions
diff --git a/gcc/cp/decl2.cc b/gcc/cp/decl2.cc index 3c4f348..0279372 100644 --- a/gcc/cp/decl2.cc +++ b/gcc/cp/decl2.cc @@ -2180,7 +2180,8 @@ static void mark_vtable_entries (tree decl, vec<tree> &consteval_vtables) { /* It's OK for the vtable to refer to deprecated virtual functions. */ - warning_sentinel w(warn_deprecated_decl); + auto du = make_temp_override (deprecated_state, + UNAVAILABLE_DEPRECATED_SUPPRESS); bool consteval_seen = false; diff --git a/gcc/testsuite/g++.dg/ext/attr-unavailable-13.C b/gcc/testsuite/g++.dg/ext/attr-unavailable-13.C new file mode 100644 index 0000000..9ca4000 --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/attr-unavailable-13.C @@ -0,0 +1,8 @@ +// PR c++/116606 +// { dg-do compile } + +struct C { + __attribute__((unavailable)) virtual void f() {} +}; + +C c; |