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

Martin Sebor <msebor at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |msebor at gcc dot gnu.org

--- Comment #3 from Martin Sebor <msebor at gcc dot gnu.org> ---
I find the [[deprecated]] behavior for the test cases here reasonable and
useful: the struct type is declared deprecated and so its subsequent uses are
diagnosed.

What I think is missing is a way for the author of a deprecated type (but not
its users) to define objects of the type without triggering the warning,
analogous to how it can be done for functions.  I would expect the following to
do it but it doesn't:

$ cat u.C && gcc -S -Wall -Wextra -Wpedantic u.C
struct S { };

S a [[deprecated]];        // expect no warning here

struct [[deprecated]] S;   // nor here

S b;                       // expect -Wdeprecated-declarations here


// Expected behavior:

int f () { return 0; }

[[deprecated]] int i = f  ();   // no warning

[[deprecated]] int f ();        // no warning

int j = f ();                   // -Wdeprecated-declarations
u.C:5:23: warning: type attributes ignored after type is already defined
[-Wattributes]
 struct [[deprecated]] S;   // nor here
                       ^
u.C:18:12: warning: ‘int f()’ is deprecated [-Wdeprecated-declarations]
 int j = f ();                   // -Wdeprecated-declarations
            ^
u.C:12:5: note: declared here
 int f () { return 0; }
     ^


Daniel, does this make sense to you?

Reply via email to