diff --git a/gcc/cp/call.cc b/gcc/cp/call.cc index c52a09b9be2..d5e8ccc07d3 100644 --- a/gcc/cp/call.cc +++ b/gcc/cp/call.cc @@ -41,6 +41,7 @@ along with GCC; see the file COPYING3. If not see #include "internal-fn.h" #include "stringpool.h" #include "attribs.h" +#include "decl.h" #include "gcc-rich-location.h" /* The various kinds of conversion. */ @@ -10413,10 +10414,11 @@ build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain) } else { - /* If FN is marked deprecated, then we've already issued a deprecated-use - warning from mark_used above, so avoid redundantly issuing another one - from build_addr_func. */ - warning_sentinel w (warn_deprecated_decl); + /* If FN is marked deprecated or unavailable, then we've already + issued a diagnostic from mark_used above, so avoid redundantly + issuing another one from build_addr_func. */ + auto w = make_temp_override (deprecated_state, + UNAVAILABLE_DEPRECATED_SUPPRESS); fn = build_addr_func (fn, complain); if (fn == error_mark_node) diff --git a/gcc/testsuite/g++.dg/ext/pr109177.C b/gcc/testsuite/g++.dg/ext/pr109177.C new file mode 100644 index 00000000000..cc322f650af --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/pr109177.C @@ -0,0 +1,6 @@ +// { dg-do compile } +void foo() __attribute__((unavailable)); +void bar () { + foo (); // { dg-bogus "is unavailable.*is unavailable" } + // { dg-error "is unavailable" "" { target *-*-* } .-1 } +}