From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id 9843E3858D37; Wed, 24 Jan 2024 22:59:45 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 9843E3858D37 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1706137185; bh=D4elEKcOj/bFhADZMZUFi0uszuzx3Hho42kEhu9gRys=; h=From:To:Subject:Date:In-Reply-To:References:From; b=jIGUK9qGJaOMus1DWIsPQzY/nYqoyuXOapWqvRgfvKi+94nowWHDTCEpXgq/gB7fC ONaZOd4fuckJy9sgI70RuJfvVlgmxD9dcbmjVQPt3Y16hyeXIEiQwRxV4WQ/E/47yU L4z0sxuXRQ29BCfmwrJXNBRZPTBYWfsvYYf7+3Wc= From: "mpolacek at gcc dot gnu.org" To: gcc-bugs@gcc.gnu.org Subject: [Bug c++/113582] incorrect warning about unused label with `pragma GCC diagnostic` around the unused label Date: Wed, 24 Jan 2024 22:59:44 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: c++ X-Bugzilla-Version: 13.2.1 X-Bugzilla-Keywords: diagnostic X-Bugzilla-Severity: normal X-Bugzilla-Who: mpolacek at gcc dot gnu.org X-Bugzilla-Status: ASSIGNED X-Bugzilla-Resolution: X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: mpolacek at gcc dot gnu.org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: bug_status assigned_to Message-ID: In-Reply-To: References: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 List-Id: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D113582 Marek Polacek changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |ASSIGNED Assignee|unassigned at gcc dot gnu.org |mpolacek at gcc dot= gnu.org --- Comment #4 from Marek Polacek --- Hack/fix: diff --git a/gcc/cp/parser.cc b/gcc/cp/parser.cc index 3748ccd49ff..224d47f2f90 100644 --- a/gcc/cp/parser.cc +++ b/gcc/cp/parser.cc @@ -13093,7 +13093,11 @@ cp_parser_label_for_labeled_statement (cp_parser* parser, tree attributes) /* Anything else must be an ordinary label. */ label =3D finish_label_stmt (cp_parser_identifier (parser)); if (label && TREE_CODE (label) =3D=3D LABEL_DECL) - FALLTHROUGH_LABEL_P (label) =3D fallthrough_p; + { + FALLTHROUGH_LABEL_P (label) =3D fallthrough_p; + if (!warning_enabled_at (input_location, OPT_Wunused_label)) + suppress_warning (label, OPT_Wunused_label); + } break; } diff --git a/gcc/cp/pt.cc b/gcc/cp/pt.cc index 74013533b0f..b6686d8543f 100644 --- a/gcc/cp/pt.cc +++ b/gcc/cp/pt.cc @@ -18796,11 +18796,13 @@ tsubst_stmt (tree t, tree args, tsubst_flags_t complain, tree in_decl) case LABEL_EXPR: { tree decl =3D LABEL_EXPR_LABEL (t); - tree label; - - label =3D finish_label_stmt (DECL_NAME (decl)); + tree label =3D finish_label_stmt (DECL_NAME (decl)); if (TREE_CODE (label) =3D=3D LABEL_DECL) - FALLTHROUGH_LABEL_P (label) =3D FALLTHROUGH_LABEL_P (decl); + { + FALLTHROUGH_LABEL_P (label) =3D FALLTHROUGH_LABEL_P (decl); + if (warning_suppressed_p (decl, OPT_Wunused_label)) + TREE_USED (label) =3D true; + } if (DECL_ATTRIBUTES (decl) !=3D NULL_TREE) cplus_decl_attributes (&label, DECL_ATTRIBUTES (decl), 0); }=