]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
tree: Fix up warn_deprecated_use [PR104627]
authorJakub Jelinek <jakub@redhat.com>
Fri, 4 Mar 2022 08:53:36 +0000 (09:53 +0100)
committerJakub Jelinek <jakub@redhat.com>
Fri, 4 Mar 2022 08:53:36 +0000 (09:53 +0100)
The r12-7287-g1b71bc7c8b18bd1b change improved the -Wdeprecated
warning for C++, but regressed it for C, in particular in
gcc.dg/deprecated.c testcase we now report a type that actually isn't
deprecated as deprecated instead of the one that is deprecated.

The following change tries to find the middle ground between what
we used to do before and what r12-7287 change does.
If TYPE_STUB_DECL (node) is non-NULL (that is what happens with
those C tests), then it will do what it used to do before (just smarter,
there is no need to lookup_attribute when it is called again a few lines
below this), if it is NULL, it will try
TYPE_STUB_DECL (TYPE_MAIN_VARIANT (node)) - what the deprecated-16.C
test needs.

2022-03-04  Jakub Jelinek  <jakub@redhat.com>

PR c/104627
* tree.cc (warn_deprecated_use): For types prefer to use node
and only use TYPE_MAIN_VARIANT (node) if TYPE_STUB_DECL (node) is
NULL.

gcc/tree.cc

index 4522d90c4d917e2a2ca5886e1862ec047dab67ed..d6f900c53b45e399c3d2a588b84f81574e116141 100644 (file)
@@ -12047,8 +12047,11 @@ warn_deprecated_use (tree node, tree attr)
        attr = DECL_ATTRIBUTES (node);
       else if (TYPE_P (node))
        {
-         tree decl = TYPE_STUB_DECL (TYPE_MAIN_VARIANT (node));
+         tree decl = TYPE_STUB_DECL (node);
          if (decl)
+           attr = TYPE_ATTRIBUTES (TREE_TYPE (decl));
+         else if ((decl = TYPE_STUB_DECL (TYPE_MAIN_VARIANT (node)))
+                  != NULL_TREE)
            {
              node = TREE_TYPE (decl);
              attr = TYPE_ATTRIBUTES (node);