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