https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91076
Bug ID: 91076 Summary: wrong class-key in mentioned in a diagnostic note Product: gcc Version: 9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: msebor at gcc dot gnu.org Target Milestone: --- When a type defined with one class-key (such as "class") contains a member such as a pointer to the same type that uses a different class-key (such as "struct") the C++ front-end replaces the original class-key associated with the type with the one used in the member. This causes problems in GCC code that examines the class-key by using CLASSTYPE_DECLARED_CLASS (t) or by calling class_key_or_enum_as_string (). A test case illustrating this bug is as follows: $ cat a.C && gcc -S -Wall -Wextra a.C class A // uses CLASS { public: struct A *p; // uses STRUCT } [[maybe_unused]]; // misleading warning refers to STRUCT a.C:6:1: warning: attribute ignored in declaration of ‘struct A’ [-Wattributes] 6 | [[maybe_unused]]; // misleading warning refers to STRUCT | ^ a.C:6:1: note: attribute for ‘struct A’ must follow the ‘struct’ keyword