From: Alex Coplan <alex.coplan@arm.com>
To: gcc-patches@gcc.gnu.org
Cc: Jason Merrill <jason@redhat.com>, Nathan Sidwell <nathan@acm.org>
Subject: [PATCH] c++: Avoid duplicate diagnostic calling unavailable function [PR109177]
Date: Wed, 22 Mar 2023 11:32:30 +0000 [thread overview]
Message-ID: <ZBrnTg7r6/KAceFW@arm.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 652 bytes --]
Hi,
As the PR shows, we currently emit duplicate diagnostics for calls to
functions marked with __attribute__((unavailable)). This patch fixes
that.
I'm not sure whether it's considered acceptable to add the include of
decl.h to call.cc (in order to get at deprecated_state). It would be
useful to get some feedback on that.
Bootstrapped/regtested on aarch64-linux-gnu, OK for trunk?
Thanks,
Alex
gcc/cp/ChangeLog:
PR c++/109177
* call.cc (build_over_call): Use make_temp_override to suppress
both unavailable and deprecated warnings when calling
build_addr_func.
gcc/testsuite/ChangeLog:
PR c++/109177
* g++.dg/ext/pr109177.C: New test.
[-- Attachment #2: patch.txt --]
[-- Type: text/plain, Size: 1498 bytes --]
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 }
+}
next reply other threads:[~2023-03-22 11:32 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-22 11:32 Alex Coplan [this message]
2023-03-22 15:10 ` Jason Merrill
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ZBrnTg7r6/KAceFW@arm.com \
--to=alex.coplan@arm.com \
--cc=gcc-patches@gcc.gnu.org \
--cc=jason@redhat.com \
--cc=nathan@acm.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).