More Sema check for constructor's member initializer along 
with type conversion to fix ir-gen crash.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@77000 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Sema/SemaDeclCXX.cpp b/lib/Sema/SemaDeclCXX.cpp
index d5c8c3d..7b0c9c6 100644
--- a/lib/Sema/SemaDeclCXX.cpp
+++ b/lib/Sema/SemaDeclCXX.cpp
@@ -725,6 +725,15 @@
         C = PerformInitializationByConstructor(
               FieldType, (Expr **)Args, NumArgs, IdLoc, 
               SourceRange(IdLoc, RParenLoc), Member->getDeclName(), IK_Direct);
+      else if (NumArgs != 1)
+        return Diag(IdLoc, diag::err_mem_initializer_mismatch) 
+                    << MemberOrBase << SourceRange(IdLoc, RParenLoc);
+      else {
+        Expr * NewExp = (Expr*)Args[0];
+        if (PerformCopyInitialization(NewExp, FieldType, "passing"))
+          return true;
+        Args[0] = NewExp;
+      }
       // FIXME: Perform direct initialization of the member.
       return new (Context) CXXBaseOrMemberInitializer(Member, (Expr **)Args, 
                                                       NumArgs, C, IdLoc);