https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99318
--- Comment #4 from CVS Commits <cvs-commit at gcc dot gnu.org> --- The releases/gcc-10 branch has been updated by Richard Biener <rgue...@gcc.gnu.org>: https://gcc.gnu.org/g:9879b82c77b0c65e39607a0a2d0891ebc75c5995 commit r10-9554-g9879b82c77b0c65e39607a0a2d0891ebc75c5995 Author: Marek Polacek <pola...@redhat.com> Date: Tue Mar 9 19:23:48 2021 -0500 c++: Fix bogus warning in deprecated namespace [PR99318] In GCC 10, I introduced cp_warn_deprecated_use_scopes so that we can handle attribute deprecated on a namespace declaration. This function walks the decl's contexts so that we warn for code like namespace [[deprecated]] N { struct S { }; } N::S s; We call cp_warn_deprecated_use_scopes when we encounter a TYPE_DECL. But in the following testcase we have a TYPE_DECL whose context is a deprecated function; that itself is not a reason to warn. This patch limits for which entities we call cp_warn_deprecated_use; essentially it's what can follow ::. I noticed that we didn't test that struct [[deprecated]] S { static void fn(); }; S::fn(); produces the expected warning, so I've added gen-attrs-73.C. gcc/cp/ChangeLog: PR c++/99318 * decl2.c (cp_warn_deprecated_use_scopes): Only call cp_warn_deprecated_use when decl is a namespace, class, or enum. gcc/testsuite/ChangeLog: PR c++/99318 * g++.dg/cpp0x/attributes-namespace6.C: New test. * g++.dg/cpp0x/gen-attrs-73.C: New test. (cherry picked from commit 831f9f768eb1fbf9a31d9a89591188b1487b6376)