diff options
Diffstat (limited to 'clang/lib/Sema')
| -rw-r--r-- | clang/lib/Sema/SemaDeclCXX.cpp | 9 | 
1 files changed, 9 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index 77823c3b820..546c783a623 100644 --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -750,6 +750,15 @@ Sema::ActOnMemInitializer(DeclPtrTy ConstructorD,    if (DirectBaseSpec && VirtualBaseSpec)      return Diag(IdLoc, diag::err_base_init_direct_and_virtual)        << MemberOrBase << SourceRange(IdLoc, RParenLoc); +  // C++ [base.class.init]p2: +  // Unless the mem-initializer-id names a nonstatic data membeer of the +  // constructor's class ot a direst or virtual base of that class, the +  // mem-initializer is ill-formed. +  if (!DirectBaseSpec && !VirtualBaseSpec) +    return Diag(IdLoc, diag::err_not_direct_base_or_virtual) +    << BaseType << ClassDecl->getNameAsCString() +    << SourceRange(IdLoc, RParenLoc); +        return new CXXBaseOrMemberInitializer(BaseType, (Expr **)Args, NumArgs,                                           IdLoc);  | 

