Zap a bogus assert for delegating constructors. PR12890, part 2.
authorEli Friedman <eli.friedman@gmail.com>
Sun, 20 May 2012 00:46:05 +0000 (00:46 +0000)
committerEli Friedman <eli.friedman@gmail.com>
Sun, 20 May 2012 00:46:05 +0000 (00:46 +0000)
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.

llvm-svn: 157138

clang/lib/CodeGen/CGExprCXX.cpp
clang/test/CodeGenCXX/cxx0x-delegating-ctors.cpp

index dc318be..fa711e1 100644 (file)
@@ -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;
index f5684d9..65afbb9 100644 (file)
@@ -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)