diff options
author | David Blaikie <dblaikie@gmail.com> | 2013-01-17 05:26:25 +0000 |
---|---|---|
committer | David Blaikie <dblaikie@gmail.com> | 2013-01-17 05:26:25 +0000 |
commit | 93c8617bec98aeb769ee9f569d7ed439eec03249 (patch) | |
tree | 421f7efc5ba2aff82b3be7bc08469aa2a6c94611 /lib/Sema/SemaDeclCXX.cpp | |
parent | 72190da43924db7d0238fe5c696ecab2bb5bf196 (diff) |
ArrayRef-ize some ctor initializer related APIs
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@172701 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/SemaDeclCXX.cpp')
-rw-r--r-- | lib/Sema/SemaDeclCXX.cpp | 54 |
1 files changed, 23 insertions, 31 deletions
diff --git a/lib/Sema/SemaDeclCXX.cpp b/lib/Sema/SemaDeclCXX.cpp index 2e73a4e9cd..c794d7e964 100644 --- a/lib/Sema/SemaDeclCXX.cpp +++ b/lib/Sema/SemaDeclCXX.cpp @@ -3062,19 +3062,17 @@ Sema::SetDelegatingInitializer(CXXConstructorDecl *Constructor, return false; } -bool Sema::SetCtorInitializers(CXXConstructorDecl *Constructor, - CXXCtorInitializer **Initializers, - unsigned NumInitializers, - bool AnyErrors) { +bool Sema::SetCtorInitializers(CXXConstructorDecl *Constructor, bool AnyErrors, + ArrayRef<CXXCtorInitializer *> Initializers) { if (Constructor->isDependentContext()) { // Just store the initializers as written, they will be checked during // instantiation. - if (NumInitializers > 0) { - Constructor->setNumCtorInitializers(NumInitializers); + if (!Initializers.empty()) { + Constructor->setNumCtorInitializers(Initializers.size()); CXXCtorInitializer **baseOrMemberInitializers = - new (Context) CXXCtorInitializer*[NumInitializers]; - memcpy(baseOrMemberInitializers, Initializers, - NumInitializers * sizeof(CXXCtorInitializer*)); + new (Context) CXXCtorInitializer*[Initializers.size()]; + memcpy(baseOrMemberInitializers, Initializers.data(), + Initializers.size() * sizeof(CXXCtorInitializer*)); Constructor->setCtorInitializers(baseOrMemberInitializers); } @@ -3095,7 +3093,7 @@ bool Sema::SetCtorInitializers(CXXConstructorDecl *Constructor, bool HadError = false; - for (unsigned i = 0; i < NumInitializers; i++) { + for (unsigned i = 0; i < Initializers.size(); i++) { CXXCtorInitializer *Member = Initializers[i]; if (Member->isBaseInitializer()) @@ -3198,7 +3196,7 @@ bool Sema::SetCtorInitializers(CXXConstructorDecl *Constructor, } } - NumInitializers = Info.AllToInit.size(); + unsigned NumInitializers = Info.AllToInit.size(); if (NumInitializers > 0) { Constructor->setNumCtorInitializers(NumInitializers); CXXCtorInitializer **baseOrMemberInitializers = @@ -3256,18 +3254,16 @@ static void *GetKeyForMember(ASTContext &Context, return Field; } -static void -DiagnoseBaseOrMemInitializerOrder(Sema &SemaRef, - const CXXConstructorDecl *Constructor, - CXXCtorInitializer **Inits, - unsigned NumInits) { +static void DiagnoseBaseOrMemInitializerOrder( + Sema &SemaRef, const CXXConstructorDecl *Constructor, + ArrayRef<CXXCtorInitializer *> Inits) { if (Constructor->getDeclContext()->isDependentContext()) return; // Don't check initializers order unless the warning is enabled at the // location of at least one initializer. bool ShouldCheckOrder = false; - for (unsigned InitIndex = 0; InitIndex != NumInits; ++InitIndex) { + for (unsigned InitIndex = 0; InitIndex != Inits.size(); ++InitIndex) { CXXCtorInitializer *Init = Inits[InitIndex]; if (SemaRef.Diags.getDiagnosticLevel(diag::warn_initializer_out_of_order, Init->getSourceLocation()) @@ -3313,7 +3309,7 @@ DiagnoseBaseOrMemInitializerOrder(Sema &SemaRef, unsigned IdealIndex = 0; CXXCtorInitializer *PrevInit = 0; - for (unsigned InitIndex = 0; InitIndex != NumInits; ++InitIndex) { + for (unsigned InitIndex = 0; InitIndex != Inits.size(); ++InitIndex) { CXXCtorInitializer *Init = Inits[InitIndex]; void *InitKey = GetKeyForMember(SemaRef.Context, Init); @@ -3423,8 +3419,7 @@ bool CheckRedundantUnionInit(Sema &S, /// ActOnMemInitializers - Handle the member initializers for a constructor. void Sema::ActOnMemInitializers(Decl *ConstructorDecl, SourceLocation ColonLoc, - CXXCtorInitializer **meminits, - unsigned NumMemInits, + ArrayRef<CXXCtorInitializer*> MemInits, bool AnyErrors) { if (!ConstructorDecl) return; @@ -3439,9 +3434,6 @@ void Sema::ActOnMemInitializers(Decl *ConstructorDecl, return; } - CXXCtorInitializer **MemInits = - reinterpret_cast<CXXCtorInitializer **>(meminits); - // Mapping for the duplicate initializers check. // For member initializers, this is keyed with a FieldDecl*. // For base initializers, this is keyed with a Type*. @@ -3451,7 +3443,7 @@ void Sema::ActOnMemInitializers(Decl *ConstructorDecl, RedundantUnionMap MemberUnions; bool HadError = false; - for (unsigned i = 0; i < NumMemInits; i++) { + for (unsigned i = 0; i < MemInits.size(); i++) { CXXCtorInitializer *Init = MemInits[i]; // Set the source order index. @@ -3469,7 +3461,7 @@ void Sema::ActOnMemInitializers(Decl *ConstructorDecl, } else { assert(Init->isDelegatingInitializer()); // This must be the only initializer - if (NumMemInits != 1) { + if (MemInits.size() != 1) { Diag(Init->getSourceLocation(), diag::err_delegating_initializer_alone) << Init->getSourceRange() << MemInits[i ? 0 : 1]->getSourceRange(); @@ -3484,9 +3476,9 @@ void Sema::ActOnMemInitializers(Decl *ConstructorDecl, if (HadError) return; - DiagnoseBaseOrMemInitializerOrder(*this, Constructor, MemInits, NumMemInits); + DiagnoseBaseOrMemInitializerOrder(*this, Constructor, MemInits); - SetCtorInitializers(Constructor, MemInits, NumMemInits, AnyErrors); + SetCtorInitializers(Constructor, AnyErrors, MemInits); } void @@ -3608,7 +3600,7 @@ void Sema::ActOnDefaultCtorInitializers(Decl *CDtorDecl) { if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(CDtorDecl)) - SetCtorInitializers(Constructor, 0, 0, /*AnyErrors=*/false); + SetCtorInitializers(Constructor, /*AnyErrors=*/false); } bool Sema::RequireNonAbstractType(SourceLocation Loc, QualType T, @@ -7523,7 +7515,7 @@ void Sema::DefineImplicitDefaultConstructor(SourceLocation CurrentLocation, SynthesizedFunctionScope Scope(*this, Constructor); DiagnosticErrorTrap Trap(Diags); - if (SetCtorInitializers(Constructor, 0, 0, /*AnyErrors=*/false) || + if (SetCtorInitializers(Constructor, /*AnyErrors=*/false) || Trap.hasErrorOccurred()) { Diag(CurrentLocation, diag::note_member_synthesized_at) << CXXDefaultConstructor << Context.getTagDeclType(ClassDecl); @@ -9151,7 +9143,7 @@ void Sema::DefineImplicitCopyConstructor(SourceLocation CurrentLocation, SynthesizedFunctionScope Scope(*this, CopyConstructor); DiagnosticErrorTrap Trap(Diags); - if (SetCtorInitializers(CopyConstructor, 0, 0, /*AnyErrors=*/false) || + if (SetCtorInitializers(CopyConstructor, /*AnyErrors=*/false) || Trap.hasErrorOccurred()) { Diag(CurrentLocation, diag::note_member_synthesized_at) << CXXCopyConstructor << Context.getTagDeclType(ClassDecl); @@ -9342,7 +9334,7 @@ void Sema::DefineImplicitMoveConstructor(SourceLocation CurrentLocation, SynthesizedFunctionScope Scope(*this, MoveConstructor); DiagnosticErrorTrap Trap(Diags); - if (SetCtorInitializers(MoveConstructor, 0, 0, /*AnyErrors=*/false) || + if (SetCtorInitializers(MoveConstructor, /*AnyErrors=*/false) || Trap.hasErrorOccurred()) { Diag(CurrentLocation, diag::note_member_synthesized_at) << CXXMoveConstructor << Context.getTagDeclType(ClassDecl); |