public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
* [Bug c++/43912] New: lambda debug info does not describe captured variables @ 2010-04-27 19:57 tromey at gcc dot gnu dot org 2010-07-27 15:14 ` [Bug c++/43912] " jakub at gcc dot gnu dot org 2010-07-28 11:41 ` jakub at gcc dot gnu dot org 0 siblings, 2 replies; 3+ messages in thread From: tromey at gcc dot gnu dot org @ 2010-04-27 19:57 UTC (permalink / raw) To: gcc-bugs It would be nice for gdb users if any variables captured by a lambda were described in the debuginfo for the inner function. See http://sourceware.org/bugzilla/show_bug.cgi?id=11547 -- Summary: lambda debug info does not describe captured variables Product: gcc Version: 4.5.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: tromey at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43912 ^ permalink raw reply [flat|nested] 3+ messages in thread
* [Bug c++/43912] lambda debug info does not describe captured variables 2010-04-27 19:57 [Bug c++/43912] New: lambda debug info does not describe captured variables tromey at gcc dot gnu dot org @ 2010-07-27 15:14 ` jakub at gcc dot gnu dot org 2010-07-28 11:41 ` jakub at gcc dot gnu dot org 1 sibling, 0 replies; 3+ messages in thread From: jakub at gcc dot gnu dot org @ 2010-07-27 15:14 UTC (permalink / raw) To: gcc-bugs ------- Comment #1 from jakub at gcc dot gnu dot org 2010-07-27 15:14 ------- I've briefly looked at this. For !processing_template_decl, it shouldn't be hard to walk LAMBDA_EXPR_CAPTURE_LIST e.g. in cp_parser_lambda_expression and add copy_decl of the vars from the capture list with DECL_VALUE_EXPR pointing to this->__fieldname or *this->__fieldname. Templates slightly complicate that though, as if this was to be done say in build_lambda_object guarded with !processing_template_decl, lambda_function probably doesn't have body instantiated yet. And if cp_parser_lambda_expression does this unconditionally, we'd need to handle tsubsting DECL_VALUE_EXPRs. Or we could add them during genericization of the lambda function, but we'd then need to be able to find the corresponding LAMBDA_EXPR from the FUNCTION_DECL. Another thing is whether it is right to call the __lambda* argument this. Even when it is artificial, it is still visible to the user in the debugger. Shouldn't it be made DECL_NAMELESS once the vars with DECL_VALUE_EXPR are added? Jason, what do you prefer here? Testcase I was playing with: extern "C" void abort (); template<typename F> F foo (int *x, int *y, F f) { for (; x != y; ++x) f (*x); return f; } template<typename T> void bar (T *w) { T s = 0, t = 0, u = 0, v = 10; foo (&w[0], &w[10], [&s, &t, u, v] (T &a) -> void { s += a; t += s + 10 - v; }); if (s != 45 || t != 165) abort (); } int main () { int s = 0, t = 0, u = 10, v = 10; int w[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; foo (&w[0], &w[10], [&s, &t, u, v] (int &a) -> void { s += a; t += s + 10 - v; }); if (s != 45 || t != 165) abort (); bar (w); return 0; } -- jakub at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jason at gcc dot gnu dot org Status|UNCONFIRMED |NEW Ever Confirmed|0 |1 Last reconfirmed|0000-00-00 00:00:00 |2010-07-27 15:14:11 date| | http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43912 ^ permalink raw reply [flat|nested] 3+ messages in thread
* [Bug c++/43912] lambda debug info does not describe captured variables 2010-04-27 19:57 [Bug c++/43912] New: lambda debug info does not describe captured variables tromey at gcc dot gnu dot org 2010-07-27 15:14 ` [Bug c++/43912] " jakub at gcc dot gnu dot org @ 2010-07-28 11:41 ` jakub at gcc dot gnu dot org 1 sibling, 0 replies; 3+ messages in thread From: jakub at gcc dot gnu dot org @ 2010-07-28 11:41 UTC (permalink / raw) To: gcc-bugs ------- Comment #2 from jakub at gcc dot gnu dot org 2010-07-28 11:41 ------- Created an attachment (id=21334) --> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=21334&action=view) gcc46-pr43912.patch Untested proof of concept patch (which handles just non-templates though). The captured vars can be printed fine in the debugger, though no testing of more complicated captures (like arrays etc.) has been done. Not sure how to handle the template case though, so not working on this anymore. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43912 ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2010-07-28 11:41 UTC | newest] Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2010-04-27 19:57 [Bug c++/43912] New: lambda debug info does not describe captured variables tromey at gcc dot gnu dot org 2010-07-27 15:14 ` [Bug c++/43912] " jakub at gcc dot gnu dot org 2010-07-28 11:41 ` jakub at gcc dot gnu dot org
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).