Index: lib/CodeGen/CGExprCXX.cpp
===================================================================
--- lib/CodeGen/CGExprCXX.cpp	(revision 148198)
+++ lib/CodeGen/CGExprCXX.cpp	(working copy)
@@ -901,9 +901,24 @@
     // zero-initialize storage if there are no user-declared constructors.
     if (E->hasInitializer() && 
         !Ctor->getParent()->hasUserDeclaredConstructor() &&
-        !Ctor->getParent()->isEmpty())
-      CGF.EmitNullInitialization(NewPtr, ElementType);
-      
+        !Ctor->getParent()->isEmpty()) {
+      // We need to emit a check for null since it is possible the user defined
+      // an overloaded operator new which does not throw, or they are using the
+      // nothrow_t version.
+      CodeGenFunction::RunCleanupsScope ConditionScope(CGF);
+
+      llvm::BasicBlock *ThenBlock = CGF.createBasicBlock("if.then");
+      llvm::BasicBlock *ContBlock = CGF.createBasicBlock("if.end");
+      llvm::Value *CondVal = CGF.Builder.CreateIsNotNull(NewPtr);
+      CGF.Builder.CreateCondBr(CondVal, ThenBlock, ContBlock);
+      CGF.EmitBlock(ThenBlock);
+      {
+        CodeGenFunction::RunCleanupsScope ThenScope(CGF);
+        CGF.EmitNullInitialization(NewPtr, ElementType);
+      }
+      CGF.EmitBranch(ContBlock);
+      CGF.EmitBlock(ContBlock, true);
+    }      
     CGF.EmitCXXConstructorCall(Ctor, Ctor_Complete, /*ForVirtualBase=*/false, 
                                NewPtr, E->constructor_arg_begin(),
                                E->constructor_arg_end());
