[cfe-dev] ParseClassSpecifier: can "unions" inherit?
Nico Weber
nicolasweber at gmx.de
Thu Sep 4 09:19:14 PDT 2008
Hi,
On 04.09.2008, at 18:01, Ted Kremenek 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?
it seems not to be allowed -- at least both gcc and clang reject it.
Clang does it in ActOnBaseSpecifier in Sema:
// C++ [class.union]p1:
// A union shall not be used as a base class.
if (BaseType->isUnionType()) {
Diag(BaseLoc, diag::err_union_as_base_class, SpecifierRange);
return;
}
Nico
More information about the cfe-dev
mailing list