diff --git a/lib/CodeGen/CodeGenFunction.cpp b/lib/CodeGen/CodeGenFunction.cpp
index 3a689a4..4bfebe5 100644
--- a/lib/CodeGen/CodeGenFunction.cpp
+++ b/lib/CodeGen/CodeGenFunction.cpp
@@ -141,6 +141,39 @@
   Ptr->eraseFromParent();
 }
 
+/// EmitCtorPrologue - This routine generates necessary code to initialize
+/// base classes and non-static data members belonging to this constructor.
+void CodeGenFunction::EmitCtorPrologue(const CXXConstructorDecl *CD) {
+  for (CXXConstructorDecl::init_const_iterator B = CD->init_begin(), 
+       E = CD->init_end();
+       B != E; ++B) {
+    CXXBaseOrMemberInitializer *Member = (*B);
+    if (Member->isBaseInitializer()) {
+      // FIXME. Added base initialilzers here.
+      ;
+    }
+    else {
+      // non-static data member initilaizers.
+      FieldDecl *Field = Member->getMember();
+      QualType FieldType = getContext().getCanonicalType((Field)->getType());
+      assert(!getContext().getAsArrayType(FieldType) 
+             && "Field arrays initialization unsupported");
+      assert(!FieldType->getAsRecordType() 
+             && "Field class initialization unsupported");
+      llvm::Value *LoadOfThis = LoadCXXThis();
+      LValue LHS = EmitLValueForField(LoadOfThis, Field, false, 0);
+      
+      assert(Member->getNumArgs() == 1 && "Initializer count must be 1 only");
+      Expr *RhsExpr = *Member->begin();
+      llvm::Value *RHS = EmitScalarExpr(RhsExpr, true);
+      if (LHS.isBitfield())
+        EmitStoreThroughBitfieldLValue(RValue::get(RHS), LHS, FieldType, 0);
+      else
+        EmitStoreThroughLValue(RValue::get(RHS), LHS, FieldType);
+    }
+  }
+}
+
 void CodeGenFunction::StartFunction(const Decl *D, QualType RetTy, 
                                     llvm::Function *Fn,
                                     const FunctionArgList &Args,
@@ -229,6 +262,8 @@
   // FIXME: Support CXXTryStmt here, too.
   if (const CompoundStmt *S = FD->getCompoundBody()) {
     StartFunction(FD, FD->getResultType(), Fn, Args, S->getLBracLoc());
+    if (const CXXConstructorDecl *CD = dyn_cast<CXXConstructorDecl>(FD))
+      EmitCtorPrologue(CD);
     EmitStmt(S);
     FinishFunction(S->getRBracLoc());
   }
