diff options
| author | Richard Smith <richard-llvm@metafoo.co.uk> | 2013-05-23 21:54:14 +0000 |
|---|---|---|
| committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2013-05-23 21:54:14 +0000 |
| commit | be93c00ab3787fe66a93b4b61294f2ee574ef30b (patch) | |
| tree | f60bfaebdffa2e330f881fa027cdcf90d40de139 /clang | |
| parent | f632f6928451637097ffe3a2bae25bb4ef755a43 (diff) | |
| download | bcm5719-llvm-be93c00ab3787fe66a93b4b61294f2ee574ef30b.tar.gz bcm5719-llvm-be93c00ab3787fe66a93b4b61294f2ee574ef30b.zip | |
Fix assert on temporary std::initializer_list.
llvm-svn: 182615
Diffstat (limited to 'clang')
| -rw-r--r-- | clang/lib/CodeGen/CGExprAgg.cpp | 3 | ||||
| -rw-r--r-- | clang/test/CodeGenCXX/cxx0x-initializer-stdinitializerlist.cpp | 10 |
2 files changed, 12 insertions, 1 deletions
diff --git a/clang/lib/CodeGen/CGExprAgg.cpp b/clang/lib/CodeGen/CGExprAgg.cpp index b974e1dcc68..f8b19d686b2 100644 --- a/clang/lib/CodeGen/CGExprAgg.cpp +++ b/clang/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/clang/test/CodeGenCXX/cxx0x-initializer-stdinitializerlist.cpp b/clang/test/CodeGenCXX/cxx0x-initializer-stdinitializerlist.cpp index d683493a83d..75c04e7fae5 100644 --- a/clang/test/CodeGenCXX/cxx0x-initializer-stdinitializerlist.cpp +++ b/clang/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(), S() }; + } +} |

