From e3b3464d4e525c4ba1ff07329bfc7d0e2cc4f684 Mon Sep 17 00:00:00 2001 From: Douglas Gregor Date: Fri, 20 Aug 2010 16:57:37 +0000 Subject: Fix a major regression with value-initialization of class types with trivial default constructors. We're weren't zero-initializing them, which manifested as (a regression in the GCC test suite) and is likely to have caused significant other breakage. llvm-svn: 111650 --- clang/lib/CodeGen/CGExprCXX.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'clang/lib/CodeGen') diff --git a/clang/lib/CodeGen/CGExprCXX.cpp b/clang/lib/CodeGen/CGExprCXX.cpp index eb984d3cbb3..8c67b8bba61 100644 --- a/clang/lib/CodeGen/CGExprCXX.cpp +++ b/clang/lib/CodeGen/CGExprCXX.cpp @@ -320,8 +320,14 @@ CodeGenFunction::EmitCXXConstructExpr(llvm::Value *Dest, InitType = getContext().getBaseElementType(Array); const CXXRecordDecl *RD = cast(InitType->getAs()->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 -- cgit v1.2.3