diff --git a/lib/Sema/SemaDeclCXX.cpp b/lib/Sema/SemaDeclCXX.cpp
index 4acde29..f22a3e8 100644
--- a/lib/Sema/SemaDeclCXX.cpp
+++ b/lib/Sema/SemaDeclCXX.cpp
@@ -912,11 +912,21 @@
   return static_cast<void *>(Field);
 }
 
+static void *GetKeyForBase(QualType BaseType) {
+  if (const RecordType *RT = BaseType->getAs<RecordType>())
+    return (void *)RT;
+  
+  assert(0 && "Unexpected base type!");
+  return 0;
+}
+
 static void *GetKeyForMember(CXXBaseOrMemberInitializer *Member, 
-                             bool MemberMaybeAnon=false) {
+                             bool MemberMaybeAnon = false) {
   // For fields injected into the class via declaration of an anonymous union,
   // use its anonymous union class declaration as the unique key.
-  if (FieldDecl *Field = Member->getMember()) {
+  if (Member->isMemberInitializer()) {
+    FieldDecl *Field = Member->getMember();
+    
     // After BuildBaseOrMemberInitializers call, Field is the anonymous union
     // data member of the class. Data member used in the initializer list is 
     // in AnonUnionMember field.
@@ -929,7 +939,8 @@
     }
     return static_cast<void *>(Field);
   }
-  return static_cast<RecordType *>(Member->getBaseClass());
+  
+  return GetKeyForBase(QualType(Member->getBaseClass(), 0));
 }
 
 void Sema::ActOnMemInitializers(DeclPtrTy ConstructorDecl, 
@@ -1003,7 +1014,7 @@
   for (CXXRecordDecl::base_class_iterator VBase =
        ClassDecl->vbases_begin(),
        E = ClassDecl->vbases_end(); VBase != E; ++VBase)
-    AllBaseOrMembers.push_back(VBase->getType()->getAs<RecordType>());
+    AllBaseOrMembers.push_back(GetKeyForBase(VBase->getType()));
     
   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
        E = ClassDecl->bases_end(); Base != E; ++Base) {
@@ -1011,7 +1022,7 @@
     // first.
     if (Base->isVirtual())
       continue;
-    AllBaseOrMembers.push_back(Base->getType()->getAs<RecordType>());
+    AllBaseOrMembers.push_back(GetKeyForBase(Base->getType()));
   }
   
   for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
diff --git a/lib/Sema/SemaTemplateInstantiateDecl.cpp b/lib/Sema/SemaTemplateInstantiateDecl.cpp
index 8222814..99b237d 100644
--- a/lib/Sema/SemaTemplateInstantiateDecl.cpp
+++ b/lib/Sema/SemaTemplateInstantiateDecl.cpp
@@ -1145,7 +1145,6 @@
       QualType BaseType(Init->getBaseClass(), 0);
       BaseType = SubstType(BaseType, TemplateArgs, Init->getSourceLocation(),
                            New->getDeclName());
-      BaseType = Context.getCanonicalType(BaseType);
 
       NewInit = BuildBaseInitializer(BaseType,
                                      (Expr **)NewArgs.data(), 
@@ -1158,7 +1157,7 @@
       
       // Is this an anonymous union?
       if (FieldDecl *UnionInit = Init->getAnonUnionMember())
-        Member = cast<FieldDecl>(UnionInit);
+        Member = cast<FieldDecl>(FindInstantiatedDecl(UnionInit));
       else
         Member = cast<FieldDecl>(FindInstantiatedDecl(Init->getMember()));
       
