diff options
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/Sema/SemaDeclCXX.cpp | 29 | 
1 files changed, 15 insertions, 14 deletions
diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index e59236c8a4e..1172d3e01b5 100644 --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -768,28 +768,29 @@ void Sema::ActOnMemInitializers(DeclPtrTy ConstructorDecl,      Diag(ColonLoc, diag::err_only_constructors_take_base_inits);      return;    } -  llvm::DenseMap<uintptr_t, CXXBaseOrMemberInitializer *>Members; +  llvm::DenseMap<void*, CXXBaseOrMemberInitializer *>Members;    for (unsigned i = 0; i < NumMemInits; i++) {      CXXBaseOrMemberInitializer *Member =         static_cast<CXXBaseOrMemberInitializer*>(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;    }  }  | 

