On Wed, Jul 11, 2012 at 5:35 PM, Nico Weber <[email protected]> wrote: > Hi, > > the attached patch fixes PR13314, clang crashing on code like this: > > void f() { > Foo foo; > [=]() { > return foo; > }; > } > > This crash was introduced in r152491, which replaced BlockDeclRefExpr > with a bit on DeclRefExpr. getCopyElisionCandidate() wasn't taught > about the new bit, so the the `return foo;` in the closure marks `foo` > as a NRVO candidate, but codegen for f() then looks at the return type > of f for NRVO. Since the function returns void, this results in a > failing assert somewhere down the line (see the bug for more details). > The attached patch makes getCopyElisionCandidate() ignore DeclRefExprs > that return to enclosing locals, which is I believe what happened
s/return to/refer to/ > before r152491 too. > > Ok? > > Nico > > > ps: A coworker tells me that this is a regression in the latest Xcode > DP, so you might want to merge the fix to the next Xcode release > branch. _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
