https://gcc.gnu.org/g:fe668633f6b5819ba04d80f13343ee7f5bba1c5b
commit r14-10648-gfe668633f6b5819ba04d80f13343ee7f5bba1c5b Author: Marek Polacek <pola...@redhat.com> Date: Thu Sep 5 13:01:59 2024 -0400 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. (cherry picked from commit d9d34f9a91371dea4bab0b54b2d7f762a6cc23e0) Diff: --- gcc/cp/decl2.cc | 3 ++- gcc/testsuite/g++.dg/ext/attr-unavailable-13.C | 8 ++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/gcc/cp/decl2.cc b/gcc/cp/decl2.cc index af2e08c8a63..f6c760338cc 100644 --- a/gcc/cp/decl2.cc +++ b/gcc/cp/decl2.cc @@ -2172,7 +2172,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 00000000000..9ca40005419 --- /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;