diff options
author | Anders Carlsson <andersca@mac.com> | 2009-08-27 05:45:01 +0000 |
---|---|---|
committer | Anders Carlsson <andersca@mac.com> | 2009-08-27 05:45:01 +0000 |
commit | 5c36fb22d9984c74855e8049ae0bd15d3a3080b8 (patch) | |
tree | 28aa8e967163468ce9c61ee689c7130bef582af5 /lib/Sema/SemaDeclCXX.cpp | |
parent | 2a16a138812f2f725f645cca95c41e6bd12ad14f (diff) |
Use early returns to avoid indentation.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@80209 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/SemaDeclCXX.cpp')
-rw-r--r-- | lib/Sema/SemaDeclCXX.cpp | 148 |
1 files changed, 76 insertions, 72 deletions
diff --git a/lib/Sema/SemaDeclCXX.cpp b/lib/Sema/SemaDeclCXX.cpp index a18dc46fe7..3d278b13ef 100644 --- a/lib/Sema/SemaDeclCXX.cpp +++ b/lib/Sema/SemaDeclCXX.cpp @@ -973,84 +973,88 @@ void Sema::ActOnMemInitializers(DeclPtrTy ConstructorDecl, << 0; err = true; } - if (!err) - BuildBaseOrMemberInitializers(Context, Constructor, + + if (err) + return; + + BuildBaseOrMemberInitializers(Context, Constructor, reinterpret_cast<CXXBaseOrMemberInitializer **>(MemInits), NumMemInits); - if (!err && (Diags.getDiagnosticLevel(diag::warn_base_initialized) - != Diagnostic::Ignored || - Diags.getDiagnosticLevel(diag::warn_field_initialized) - != Diagnostic::Ignored)) { - // Also issue warning if order of ctor-initializer list does not match order - // of 1) base class declarations and 2) order of non-static data members. - llvm::SmallVector<const void*, 32> AllBaseOrMembers; - - CXXRecordDecl *ClassDecl - = cast<CXXRecordDecl>(Constructor->getDeclContext()); - // Push virtual bases before others. - for (CXXRecordDecl::base_class_iterator VBase = - ClassDecl->vbases_begin(), - E = ClassDecl->vbases_end(); VBase != E; ++VBase) - AllBaseOrMembers.push_back(VBase->getType()->getAs<RecordType>()); - - for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(), - E = ClassDecl->bases_end(); Base != E; ++Base) { - // Virtuals are alread in the virtual base list and are constructed - // first. - if (Base->isVirtual()) - continue; - AllBaseOrMembers.push_back(Base->getType()->getAs<RecordType>()); - } - - for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(), - E = ClassDecl->field_end(); Field != E; ++Field) - AllBaseOrMembers.push_back(GetKeyForTopLevelField(*Field)); + if (Diags.getDiagnosticLevel(diag::warn_base_initialized) == + Diagnostic::Ignored && + Diags.getDiagnosticLevel(diag::warn_field_initialized) == + Diagnostic::Ignored) + return; + + // Also issue warning if order of ctor-initializer list does not match order + // of 1) base class declarations and 2) order of non-static data members. + llvm::SmallVector<const void*, 32> AllBaseOrMembers; + + CXXRecordDecl *ClassDecl + = cast<CXXRecordDecl>(Constructor->getDeclContext()); + // Push virtual bases before others. + for (CXXRecordDecl::base_class_iterator VBase = + ClassDecl->vbases_begin(), + E = ClassDecl->vbases_end(); VBase != E; ++VBase) + AllBaseOrMembers.push_back(VBase->getType()->getAs<RecordType>()); - int Last = AllBaseOrMembers.size(); - int curIndex = 0; - CXXBaseOrMemberInitializer *PrevMember = 0; - for (unsigned i = 0; i < NumMemInits; i++) { - CXXBaseOrMemberInitializer *Member = - static_cast<CXXBaseOrMemberInitializer*>(MemInits[i]); - void *MemberInCtorList = GetKeyForMember(Member, true); - - for (; curIndex < Last; curIndex++) - if (MemberInCtorList == AllBaseOrMembers[curIndex]) - break; - if (curIndex == Last) { - assert(PrevMember && "Member not in member list?!"); - // Initializer as specified in ctor-initializer list is out of order. - // Issue a warning diagnostic. - if (PrevMember->isBaseInitializer()) { - // Diagnostics is for an initialized base class. - Type *BaseClass = PrevMember->getBaseClass(); - Diag(PrevMember->getSourceLocation(), - diag::warn_base_initialized) - << BaseClass->getDesugaredType(true); - } else { - FieldDecl *Field = PrevMember->getMember(); - Diag(PrevMember->getSourceLocation(), - diag::warn_field_initialized) - << Field->getNameAsString(); - } - // Also the note! - if (FieldDecl *Field = Member->getMember()) - Diag(Member->getSourceLocation(), - diag::note_fieldorbase_initialized_here) << 0 - << Field->getNameAsString(); - else { - Type *BaseClass = Member->getBaseClass(); - Diag(Member->getSourceLocation(), - diag::note_fieldorbase_initialized_here) << 1 - << BaseClass->getDesugaredType(true); - } - for (curIndex = 0; curIndex < Last; curIndex++) - if (MemberInCtorList == AllBaseOrMembers[curIndex]) - break; + for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(), + E = ClassDecl->bases_end(); Base != E; ++Base) { + // Virtuals are alread in the virtual base list and are constructed + // first. + if (Base->isVirtual()) + continue; + AllBaseOrMembers.push_back(Base->getType()->getAs<RecordType>()); + } + + for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(), + E = ClassDecl->field_end(); Field != E; ++Field) + AllBaseOrMembers.push_back(GetKeyForTopLevelField(*Field)); + + int Last = AllBaseOrMembers.size(); + int curIndex = 0; + CXXBaseOrMemberInitializer *PrevMember = 0; + for (unsigned i = 0; i < NumMemInits; i++) { + CXXBaseOrMemberInitializer *Member = + static_cast<CXXBaseOrMemberInitializer*>(MemInits[i]); + void *MemberInCtorList = GetKeyForMember(Member, true); + + for (; curIndex < Last; curIndex++) + if (MemberInCtorList == AllBaseOrMembers[curIndex]) + break; + if (curIndex == Last) { + assert(PrevMember && "Member not in member list?!"); + // Initializer as specified in ctor-initializer list is out of order. + // Issue a warning diagnostic. + if (PrevMember->isBaseInitializer()) { + // Diagnostics is for an initialized base class. + Type *BaseClass = PrevMember->getBaseClass(); + Diag(PrevMember->getSourceLocation(), + diag::warn_base_initialized) + << BaseClass->getDesugaredType(true); + } else { + FieldDecl *Field = PrevMember->getMember(); + Diag(PrevMember->getSourceLocation(), + diag::warn_field_initialized) + << Field->getNameAsString(); } - PrevMember = Member; + // Also the note! + if (FieldDecl *Field = Member->getMember()) + Diag(Member->getSourceLocation(), + diag::note_fieldorbase_initialized_here) << 0 + << Field->getNameAsString(); + else { + Type *BaseClass = Member->getBaseClass(); + Diag(Member->getSourceLocation(), + diag::note_fieldorbase_initialized_here) << 1 + << BaseClass->getDesugaredType(true); + } + for (curIndex = 0; curIndex < Last; curIndex++) + if (MemberInCtorList == AllBaseOrMembers[curIndex]) + break; } + PrevMember = Member; } } |