<div dir="ltr">Hi Ben,<br><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jan 27, 2015 at 3:06 PM, Ben Langmuir <span dir="ltr"><<a href="mailto:blangmuir@apple.com" target="_blank">blangmuir@apple.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Richard,<br>
<br>
Could you take a look at this patch?  I haven’t messed with capturing in a long time and I don’t want to break it ;-)</blockquote><div> </div><div>LGTM as a diagnostics improvement (but see below).</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
    Don't mistakenly capture byref in block nested in lambda<br>
<br>
    Even if an enclosing lambda captures a variable by reference, we capture<br>
    it by *copy* in a block unless the variable itself was declared with a<br>
    reference type. Codegen was already correct, but we were not diagnosing<br>
    attempts to modify the variable in Sema.<br></blockquote><div><br></div><div>Hmm, I think I'm missing something here -- it looks like we would diagnose it, but we'd use a suboptimal diagnostic: CheckForModifiableLvalue would diagnose as err_typecheck_assign_const in this case.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
    This also fixes a crash on invalid when trying to modify a variable with<br>
    non-trivial copy constructor and assignment operator in such a<br>
    situation.<br></blockquote><div><br></div><div>I can't reproduce this crash with current trunk, assuming this is supposed to be covered by the uses of 'A' in test7 in SemaCXX/blocks.cpp.</div></div></div></div>