From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id DB1B239A1826; Fri, 11 Jun 2021 15:50:27 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org DB1B239A1826 From: "mpolacek at gcc dot gnu.org" To: gcc-bugs@gcc.gnu.org Subject: [Bug c++/101015] Poor diagnostic for deprecated alias-declaration Date: Fri, 11 Jun 2021 15:50:27 +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: 12.0 X-Bugzilla-Keywords: diagnostic X-Bugzilla-Severity: normal X-Bugzilla-Who: mpolacek at gcc dot gnu.org X-Bugzilla-Status: NEW X-Bugzilla-Resolution: X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: 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 X-BeenThere: gcc-bugs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-bugs mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 11 Jun 2021 15:50:28 -0000 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D101015 --- Comment #2 from Marek Polacek --- This is because dump_decl does the decoration for TYPE_DECL_ALIAS_P: 1228 if (TYPE_DECL_ALIAS_P (t) 1229 && (flags & TFF_DECL_SPECIFIERS 1230 || flags & TFF_CLASS_KEY_OR_ENUM)) 1231 { 1232 pp_cxx_ws_string (pp, "using"); 1233 dump_decl (pp, DECL_NAME (t), flags); 1234 pp_cxx_whitespace (pp); 1235 pp_cxx_ws_string (pp, "=3D"); 1236 pp_cxx_whitespace (pp); 1237 dump_type (pp, (DECL_ORIGINAL_TYPE (t) 1238 ? DECL_ORIGINAL_TYPE (t) : TREE_TYPE (t)), 1239 flags); A way around it would be to disable TYPE_DECL_ALIAS_P temporarily for the warning: --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -5519,7 +5519,16 @@ cp_warn_deprecated_use (tree decl, tsubst_flags_t complain) } } else - warned =3D warn_deprecated_use (decl, NULL_TREE); + { + // XXX alias_type_or_template_p? + const bool using_p =3D (TREE_CODE (decl) =3D=3D TYPE_DECL + && TYPE_DECL_ALIAS_P (decl)); + if (using_p) + TYPE_DECL_ALIAS_P (decl) =3D false; + warned =3D warn_deprecated_use (decl, NULL_TREE); + if (using_p) + TYPE_DECL_ALIAS_P (decl) =3D true; + } return warned; } and then we get: 101015.C:7:8: warning: =E2=80=98A::bad=E2=80=99 is deprecated [-Wdeprecated= -declarations] 7 | A::bad j =3D 0; | ^ 101015.C:3:9: note: declared here 3 | using bad [[deprecated]] =3D int; | ^~~ But maybe that's too ugly a hack.=