summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaDeclCXX.cpp
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2009-06-30 17:34:52 +0000
committerFariborz Jahanian <fjahanian@apple.com>2009-06-30 17:34:52 +0000
commit7baa71e2dd9c0bcb02ebc26df05016e5476c1b40 (patch)
tree781a971baf04dc3521dfdfafa505268a84d05bb5 /clang/lib/Sema/SemaDeclCXX.cpp
parentdda7ced32ed79f4d60e89d2b64cd2ee041b66616 (diff)
downloadbcm5719-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.cpp9
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);
OpenPOWER on IntegriCloud