https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85921

--- Comment #10 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Or just get rid of the bogus variable.
  const char *noinline = "noinline";

  if (DECL_DECLARED_INLINE_P (newdecl)
      && DECL_UNINLINABLE (olddecl)
      && lookup_attribute (noinline, DECL_ATTRIBUTES (olddecl)))
    warned |= warning (OPT_Wattributes, "inline declaration of %qD follows "
                       "declaration with attribute %qs", newdecl, noinline);
  else if (DECL_DECLARED_INLINE_P (olddecl)
           && DECL_UNINLINABLE (newdecl)
           && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
    warned |= warning (OPT_Wattributes, "declaration of %q+D with attribute "
                       "%qs follows inline declaration", newdecl, noinline);

So it uses "noinline" in the second lookup_attribute, but noinline in the first
one.

Something like:
--- gcc/c-warn.c.jj     2018-05-21 13:15:33.878575581 +0200
+++ gcc/c-warn.c        2018-05-25 14:28:12.151050892 +0200
@@ -2246,18 +2246,16 @@ diagnose_mismatched_attributes (tree old
                       newdecl);

   /* Diagnose inline __attribute__ ((noinline)) which is silly.  */
-  const char *noinline = "noinline";
-
   if (DECL_DECLARED_INLINE_P (newdecl)
       && DECL_UNINLINABLE (olddecl)
-      && lookup_attribute (noinline, DECL_ATTRIBUTES (olddecl)))
+      && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
     warned |= warning (OPT_Wattributes, "inline declaration of %qD follows "
-                      "declaration with attribute %qs", newdecl, noinline);
+                      "declaration with attribute %<noinline%>", newdecl);
   else if (DECL_DECLARED_INLINE_P (olddecl)
           && DECL_UNINLINABLE (newdecl)
           && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
     warned |= warning (OPT_Wattributes, "declaration of %q+D with attribute "
-                      "%qs follows inline declaration", newdecl, noinline);
+                      "%<noinline%> follows inline declaration", newdecl);

   return warned;
 }

perhaps for backports don't change the wording of the translatable message and
just use "noinline" instead of noinline.

Reply via email to