From: Eli Friedman Date: Sun, 20 May 2012 00:46:05 +0000 (+0000) Subject: Zap a bogus assert for delegating constructors. PR12890, part 2. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a2ac407e285290508c86baa358a0c011ce6f8958;p=clang Zap a bogus assert for delegating constructors. PR12890, part 2. I'm pretty sure we are in fact doing the right thing here, but someone who knows the standard better should double-check that we are in fact supposed to zero out the member in the given testcase. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@157138 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/CGExprCXX.cpp b/lib/CodeGen/CGExprCXX.cpp index dc318bedf9..fa711e17e7 100644 --- a/lib/CodeGen/CGExprCXX.cpp +++ b/lib/CodeGen/CGExprCXX.cpp @@ -409,7 +409,6 @@ CodeGenFunction::EmitCXXConstructExpr(const CXXConstructExpr *E, if (E->requiresZeroInitialization() && !Dest.isZeroed()) { switch (E->getConstructionKind()) { case CXXConstructExpr::CK_Delegating: - assert(0 && "Delegating constructor should not need zeroing"); case CXXConstructExpr::CK_Complete: EmitNullInitialization(Dest.getAddr(), E->getType()); break; diff --git a/test/CodeGenCXX/cxx0x-delegating-ctors.cpp b/test/CodeGenCXX/cxx0x-delegating-ctors.cpp index f5684d93ab..65afbb9c2c 100644 --- a/test/CodeGenCXX/cxx0x-delegating-ctors.cpp +++ b/test/CodeGenCXX/cxx0x-delegating-ctors.cpp @@ -54,3 +54,14 @@ delegator::delegator(char) delegator::delegator(int) : delegator() {} + +namespace PR12890 { + class X { + int x; + X() = default; + X(int); + }; + X::X(int) : X() {} +} +// CHECK: define {{.*}} @_ZN7PR128901XC1Ei(%"class.PR12890::X"* %this, i32) +// CHECK: call void @llvm.memset.p0i8.i64(i8* {{.*}}, i8 0, i64 4, i32 4, i1 false)