Fix a major regression with value-initialization of class types with
trivial default constructors. We're weren't zero-initializing them,
which manifested as <rdar://problem/8320532> (a regression in the GCC
test suite) and is likely to have caused significant other breakage.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@111650 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/CGExprCXX.cpp b/lib/CodeGen/CGExprCXX.cpp
index eb984d3..8c67b8b 100644
--- a/lib/CodeGen/CGExprCXX.cpp
+++ b/lib/CodeGen/CGExprCXX.cpp
@@ -320,8 +320,14 @@
       InitType = getContext().getBaseElementType(Array);
     const CXXRecordDecl *RD =
     cast<CXXRecordDecl>(InitType->getAs<RecordType>()->getDecl());
-    if (RD->hasTrivialConstructor())
+    if (RD->hasTrivialConstructor()) {
+      // The constructor is trivial, but we may still need to zero-initialize
+      // the class.
+      if (E->requiresZeroInitialization())
+        EmitNullInitialization(Dest, E->getType());
+      
       return;
+    }
   }
   // Code gen optimization to eliminate copy constructor and return
   // its first argument instead, if in fact that argument is a temporary