]> granicus.if.org Git - clang/commitdiff
Take care of Chris's comments.
authorFariborz Jahanian <fjahanian@apple.com>
Tue, 30 Jun 2009 00:17:27 +0000 (00:17 +0000)
committerFariborz Jahanian <fjahanian@apple.com>
Tue, 30 Jun 2009 00:17:27 +0000 (00:17 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@74486 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/AST/DeclCXX.h
lib/Sema/SemaDeclCXX.cpp

index 05383d885d5bc3cfc81a755823a52fce62521dd8..847dd0cfdfcf3599eb1b89afa127649eeaa4b387 100644 (file)
@@ -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<void*>(BaseOrMember); }
   
   /// isBaseInitializer - Returns true when this initializer is
   /// initializing a base class.
index e59236c8a4efc404ad6d6f0e976b3eb31dabc645..1172d3e01b5e5123e52fa8a2e5707316ddfaa561 100644 (file)
@@ -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;
   }
 }