More work toward initialization of objects
in constructors.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@76980 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/CGCXX.cpp b/lib/CodeGen/CGCXX.cpp
index 4a2db05..2349171 100644
--- a/lib/CodeGen/CGCXX.cpp
+++ b/lib/CodeGen/CGCXX.cpp
@@ -432,13 +432,22 @@
       QualType FieldType = getContext().getCanonicalType((Field)->getType());
       assert(!getContext().getAsArrayType(FieldType) 
              && "FIXME. Field arrays initialization unsupported");
-      assert(!FieldType->getAsRecordType() 
-             && "FIXME. Field class initialization unsupported");
+
       llvm::Value *LoadOfThis = LoadCXXThis();
       LValue LHS = EmitLValueForField(LoadOfThis, Field, false, 0);
+      if (FieldType->getAsRecordType()) {
+        
+          assert(Member->getConstructor() && 
+                 "EmitCtorPrologue - no constructor to initialize member");
+          EmitCXXConstructorCall(Member->getConstructor(),
+                                 Ctor_Complete, LHS.getAddress(),
+                                 Member->const_arg_begin(), 
+                                 Member->const_arg_end());
+        continue;
+      }
       
       assert(Member->getNumArgs() == 1 && "Initializer count must be 1 only");
-      Expr *RhsExpr = *Member->begin();
+      Expr *RhsExpr = *Member->arg_begin();
       llvm::Value *RHS = EmitScalarExpr(RhsExpr, true);
       if (LHS.isBitfield())
         EmitStoreThroughBitfieldLValue(RValue::get(RHS), LHS, FieldType, 0);