This is an archive of the discontinued LLVM Phabricator instance.

Fix a clang bug in lambda capture of 'this'
AbandonedPublic

Authored by twoh on May 17 2016, 9:23 PM.

Details

Reviewers
rsmith
Summary

(This is a fix for Bug 27797 https://llvm.org/bugs/show_bug.cgi?id=27797).

Currently when RebuildLambdaScopeInfo() function in lib/Sema/SemaDecl.cpp observes lambda capturing 'this', it calls Sema::getCurrentThisType() to get the type of 'this'. However, clang (revision 269789) crashes with an assertion failure inside Sema::getCurrentThisType() if template instantiation creates nested lambdas. Inside, Sema::getCurrentThisType(), there is an assertion saying that getCurLambda() never returns nullptr, but nest lambdas created by template instantiation makes getCurLambda() returns nullptr.

Actually, even without the assertion failure, calling Sema::getCurrentThisType() from RebuildLambdaScopeInfo() seems wrong. When there are nested lambdas, what is required from Sema::getCurrentThisType() is a type of 'this' for nesting lambda, while what is supposed to be returned from Sema::getCurrentThisType() is a type of 'this' for nested lambda.

This patch addresses this issue and makes RebuildLambdaScopeInfo() compute the correct 'this' type.

Diff Detail

Event Timeline

twoh updated this revision to Diff 57557.May 17 2016, 9:23 PM
twoh retitled this revision from to Fix a clang bug in lambda capture of 'this'.
twoh updated this object.
twoh added reviewers: faisalv, rsmith.
twoh added a subscriber: cfe-commits.

The patch'll need a test case (in clang/tests) - I've not looked at the
change/have much opinion there, just suggesting adding a test at minimum so
when someone does come to review it it's more complete/closer to/ready to
commit.

faisalv edited edge metadata.May 18 2016, 4:11 AM
faisalv added a subscriber: faisalv.

Thanks for the work here - but this bug is a duplicate of this:
https://llvm.org/bugs/show_bug.cgi?id=27507, which unearthed some
other subtle bugs with the cv capture of *this by copy.
I've submitted a patch for review here: http://reviews.llvm.org/D19783
that addresses both issues - about 2-3 weeks ago - given the
nastiness of this bug, the fact that it was introduced by one of my
patches and that there is now a second report of the bug - and that I
feel reasonably good about the fix - I'll commit this patch before the
weekend, unless Richard raises an issue.

Faisal Vali

twoh added a comment.May 18 2016, 8:50 AM

Thank you for your comments. @faisalv, it is great that you already submitted a patch. Let me see if your patch resolves the issue I have. Thanks!

That feedback would be greatly appreciated - thanks Taewook!
Faisal Vali

faisalv resigned from this revision.Jun 26 2016, 6:26 AM
faisalv removed a reviewer: faisalv.

Should be fixed by: http://reviews.llvm.org/D19783.

Thanks again for your feedback and all the time you put into this =)

twoh abandoned this revision.Jan 26 2017, 8:42 AM