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

Reply via email to