[cfe-dev] ParseClassSpecifier: can "unions" inherit?

Doug Gregor doug.gregor at gmail.com
Thu Sep 4 09:45:33 PDT 2008


On Thu, Sep 4, 2008 at 12:01 PM, Ted Kremenek <kremenek at apple.com> wrote:
> I just noticed the following code fragment in ParseClassSpecifier:
>
>   // Parse the tag portion of this.
>   DeclTy *TagDecl = Actions.ActOnTag(CurScope, TagType, TK, StartLoc,
> Name,
>                                      NameLoc, Attr);
>
>   // Parse the optional base clause (C++ only).
>   if (getLang().CPlusPlus && Tok.is(tok::colon)) {
>     ParseBaseClause(TagDecl);
>   }
>
> It appears from the code that the 'if' branch can be taken even if the
> tag decl is a union.  Is this valid in the C++ grammar?  That is, can
> there be a "base clause" for unions in C++, and if so, what does that
> mean?

In the C++ grammar, unions can have base classes, but it's
semantically incorrect according to [class.union]p1. So, the parser
parses it and Sema gives an error (see Sema::ActOnBaseSpecifier).

  - Doug



More information about the cfe-dev mailing list