From: Fariborz Jahanian Date: Tue, 30 Jun 2009 00:17:27 +0000 (+0000) Subject: Take care of Chris's comments. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=16dbdce02366c372fe934c0528148fc38906f21a;p=clang Take care of Chris's comments. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@74486 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/AST/DeclCXX.h b/include/clang/AST/DeclCXX.h index 05383d885d..847dd0cfdf 100644 --- a/include/clang/AST/DeclCXX.h +++ b/include/clang/AST/DeclCXX.h @@ -616,7 +616,7 @@ public: /// getBaseOrMember - get the generic 'member' representing either the field /// or a base class. - uintptr_t getBaseOrMember() const { return BaseOrMember; } + void* getBaseOrMember() const { return reinterpret_cast(BaseOrMember); } /// isBaseInitializer - Returns true when this initializer is /// initializing a base class. diff --git a/lib/Sema/SemaDeclCXX.cpp b/lib/Sema/SemaDeclCXX.cpp index e59236c8a4..1172d3e01b 100644 --- a/lib/Sema/SemaDeclCXX.cpp +++ b/lib/Sema/SemaDeclCXX.cpp @@ -768,28 +768,29 @@ void Sema::ActOnMemInitializers(DeclPtrTy ConstructorDecl, Diag(ColonLoc, diag::err_only_constructors_take_base_inits); return; } - llvm::DenseMapMembers; + llvm::DenseMapMembers; for (unsigned i = 0; i < NumMemInits; i++) { CXXBaseOrMemberInitializer *Member = static_cast(MemInits[i]); CXXBaseOrMemberInitializer *&PrevMember = Members[Member->getBaseOrMember()]; - if (!PrevMember) + if (!PrevMember) { PrevMember = Member; + continue; + } + if (FieldDecl *Field = Member->getMember()) + Diag(Member->getSourceLocation(), + diag::error_multiple_mem_initialization) + << Field->getNameAsString(); else { - if (FieldDecl *Field = Member->getMember()) - Diag(Member->getSourceLocation(), - diag::error_multiple_mem_initialization) - << Field->getNameAsString(); - else if (Type *BaseClass = Member->getBaseClass()) - Diag(Member->getSourceLocation(), - diag::error_multiple_base_initialization) - << BaseClass->getDesugaredType(true); - else - assert(false && "ActOnMemInitializers - neither field or base"); - Diag(PrevMember->getSourceLocation(), diag::note_previous_initializer) - << 0; + Type *BaseClass = Member->getBaseClass(); + assert(BaseClass && "ActOnMemInitializers - neither field or base"); + Diag(Member->getSourceLocation(), + diag::error_multiple_base_initialization) + << BaseClass->getDesugaredType(true); } + Diag(PrevMember->getSourceLocation(), diag::note_previous_initializer) + << 0; } }