From: Richard Smith Date: Thu, 23 May 2013 21:54:14 +0000 (+0000) Subject: Fix assert on temporary std::initializer_list. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e69fb2043519d8f36314dd5dd78bb7638c6140f6;p=clang Fix assert on temporary std::initializer_list. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@182615 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/CGExprAgg.cpp b/lib/CodeGen/CGExprAgg.cpp index b974e1dcc6..f8b19d686b 100644 --- a/lib/CodeGen/CGExprAgg.cpp +++ b/lib/CodeGen/CGExprAgg.cpp @@ -1159,12 +1159,13 @@ void AggExprEmitter::VisitInitListExpr(InitListExpr *E) { if (E->hadArrayRangeDesignator()) CGF.ErrorUnsupported(E, "GNU array range designator extension"); + AggValueSlot Dest = EnsureSlot(E->getType()); + if (E->initializesStdInitializerList()) { EmitStdInitializerList(Dest.getAddr(), E); return; } - AggValueSlot Dest = EnsureSlot(E->getType()); LValue DestLV = CGF.MakeAddrLValue(Dest.getAddr(), E->getType(), Dest.getAlignment()); diff --git a/test/CodeGenCXX/cxx0x-initializer-stdinitializerlist.cpp b/test/CodeGenCXX/cxx0x-initializer-stdinitializerlist.cpp index d683493a83..75c04e7fae 100644 --- a/test/CodeGenCXX/cxx0x-initializer-stdinitializerlist.cpp +++ b/test/CodeGenCXX/cxx0x-initializer-stdinitializerlist.cpp @@ -275,3 +275,13 @@ namespace rdar13325066 { for (X x : { x1, x2 }) { } } } + +namespace dtors { + struct S { + S(); + ~S(); + }; + void f() { + std::initializer_list{ S(), S() }; + } +}