diff options
| author | Fariborz Jahanian <fjahanian@apple.com> | 2009-06-30 17:34:52 +0000 |
|---|---|---|
| committer | Fariborz Jahanian <fjahanian@apple.com> | 2009-06-30 17:34:52 +0000 |
| commit | 7baa71e2dd9c0bcb02ebc26df05016e5476c1b40 (patch) | |
| tree | 781a971baf04dc3521dfdfafa505268a84d05bb5 /clang/lib/Sema/SemaDeclCXX.cpp | |
| parent | dda7ced32ed79f4d60e89d2b64cd2ee041b66616 (diff) | |
| download | bcm5719-llvm-7baa71e2dd9c0bcb02ebc26df05016e5476c1b40.tar.gz bcm5719-llvm-7baa71e2dd9c0bcb02ebc26df05016e5476c1b40.zip | |
More diagnostics related to initialization of direct bases
in ctor-initializer list.
llvm-svn: 74541
Diffstat (limited to 'clang/lib/Sema/SemaDeclCXX.cpp')
| -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); |

