aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/CodeGen/CGExprAgg.cpp10
-rw-r--r--test/CodeGenCXX/new.cpp6
2 files changed, 14 insertions, 2 deletions
diff --git a/lib/CodeGen/CGExprAgg.cpp b/lib/CodeGen/CGExprAgg.cpp
index 2c122ebe13..70fc2c4ccf 100644
--- a/lib/CodeGen/CGExprAgg.cpp
+++ b/lib/CodeGen/CGExprAgg.cpp
@@ -106,6 +106,7 @@ public:
void VisitConditionalOperator(const ConditionalOperator *CO);
void VisitChooseExpr(const ChooseExpr *CE);
void VisitInitListExpr(InitListExpr *E);
+ void VisitImplicitValueInitExpr(ImplicitValueInitExpr *E);
void VisitCXXDefaultArgExpr(CXXDefaultArgExpr *DAE) {
Visit(DAE->getExpr());
}
@@ -465,8 +466,13 @@ void AggExprEmitter::VisitCXXExprWithTemporaries(CXXExprWithTemporaries *E) {
}
void AggExprEmitter::VisitCXXZeroInitValueExpr(CXXZeroInitValueExpr *E) {
- LValue lvalue = LValue::MakeAddr(DestPtr, Qualifiers());
- EmitNullInitializationToLValue(lvalue, E->getType());
+ LValue LV = LValue::MakeAddr(DestPtr, Qualifiers());
+ EmitNullInitializationToLValue(LV, E->getType());
+}
+
+void AggExprEmitter::VisitImplicitValueInitExpr(ImplicitValueInitExpr *E) {
+ LValue LV = LValue::MakeAddr(DestPtr, Qualifiers());
+ EmitNullInitializationToLValue(LV, E->getType());
}
void AggExprEmitter::EmitInitializationToLValue(Expr* E, LValue LV) {
diff --git a/test/CodeGenCXX/new.cpp b/test/CodeGenCXX/new.cpp
index 71dbf1937e..f3c14a78d3 100644
--- a/test/CodeGenCXX/new.cpp
+++ b/test/CodeGenCXX/new.cpp
@@ -90,3 +90,9 @@ A* t10() {
return new(1, 2, 3.45, 100) A;
}
+struct B { };
+void t11() {
+ // CHECK: call i8* @_Znwm
+ // CHECK: call void @llvm.memset.i64(
+ B* b = new B();
+}