Issue 135481
Summary [[deprecated]] attribute ignored after definition
Labels new issue
Assignees
Reporter kimbarrett
    If a function declaration is adding the `[[deprecated]]` attribute to an
already defined but not deprecated function, that attribute is ignored. It
generates a `-Wignored-attribute` warning if that's enabled. The attribute is
successfully added if there are only prior non-definition declarations of the
function. There's not an obvious (to me) reason to ignore the added attribute
after a definition. Redeclarations to add this attribute are permitted by the
standard. And whether there is or is not a prior definition may depend on a
multitude of factors.

Test case:

---------- 
inline int frob(int x)
#ifdef DEFINE_BEFORE_DEPRECATE
{ return x; }
#else
;
#endif
[[deprecated]] int frob(int);
----------

Compile without defining DEFINE_BEFORE_DEPRECATE => no warnings.

Compile with -DDEFINE_BEFORE_DEPRECATE =>

ignored-deprecation-after-definition.cpp:7:3: warning: attribute declaration must precede definition [-Wignored-attributes]
    7 | [[deprecated]] int frob(int);
      | ^
ignored-deprecation-after-definition.cpp:1:12: note: previous definition is here
    1 | inline int frob(int x)
      |            ^

_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to