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)
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;
--- /dev/null
+// PR c++/116606
+// { dg-do compile }
+
+struct C {
+ __attribute__((unavailable)) virtual void f() {}
+};
+
+C c;