public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/106086] New: ICE: trying to capture 'this' in instantiation of generic lambda
@ 2022-06-26  5:37 ldalessandro at gmail dot com
  2022-07-14 14:20 ` [Bug c++/106086] " ppalka at gcc dot gnu.org
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: ldalessandro at gmail dot com @ 2022-06-26  5:37 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106086

            Bug ID: 106086
           Summary: ICE: trying to capture 'this' in instantiation of
                    generic lambda
           Product: gcc
           Version: 13.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: ldalessandro at gmail dot com
  Target Milestone: ---

Following code generates ICE

    #include <array>
    #include <concepts>
    #include <utility>

    template <int>
    struct foo {
        constexpr auto operator()(std::same_as<int> auto...) const -> int {
            return 0;
        }
    };

    template <int _size>
    struct bar : foo<_size>
    {
        constexpr auto operator()(std::array<int, _size> index) const -> int
        {
            return [&]<std::size_t... i>(std::index_sequence<i...>) {
                return foo<_size>::operator()(index[i]...);
            }(std::make_index_sequence<_size>());
        }
    };

    bar<1> b;
    int i = b({0}); // <-- ERROR

<source>:18:58: internal compiler error: trying to capture 'this' in
instantiation of generic lambda

live: https://godbolt.org/z/TKGWME5aG

A couple of similar, closed bugs show up in the search so I've added them as
see-also. 105788 might be the same but it's listed as "ice-on-invalid-code" and
I'm fairly sure mine is valid (it refers to 100291).

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug c++/106086] ICE: trying to capture 'this' in instantiation of generic lambda
  2022-06-26  5:37 [Bug c++/106086] New: ICE: trying to capture 'this' in instantiation of generic lambda ldalessandro at gmail dot com
@ 2022-07-14 14:20 ` ppalka at gcc dot gnu.org
  2023-10-20 14:50 ` cvs-commit at gcc dot gnu.org
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: ppalka at gcc dot gnu.org @ 2022-07-14 14:20 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106086

Patrick Palka <ppalka at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Last reconfirmed|                            |2022-07-14
             Status|UNCONFIRMED                 |NEW
                 CC|                            |ppalka at gcc dot gnu.org
     Ever confirmed|0                           |1

--- Comment #1 from Patrick Palka <ppalka at gcc dot gnu.org> ---
Reduced C++17 ICE-on-valid testcase:

template<class>
struct foo {
  int operator()(...) const;
};

template<class T>
struct bar : foo<T> {
  auto operator()() const {
    return [&](auto x) {
      return foo<T>::operator()(decltype(x){});
    };
  }
};

bar<int> b;
int i = b()(0);

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug c++/106086] ICE: trying to capture 'this' in instantiation of generic lambda
  2022-06-26  5:37 [Bug c++/106086] New: ICE: trying to capture 'this' in instantiation of generic lambda ldalessandro at gmail dot com
  2022-07-14 14:20 ` [Bug c++/106086] " ppalka at gcc dot gnu.org
@ 2023-10-20 14:50 ` cvs-commit at gcc dot gnu.org
  2023-10-20 14:51 ` ppalka at gcc dot gnu.org
  2023-10-25 20:21 ` ppalka at gcc dot gnu.org
  3 siblings, 0 replies; 5+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2023-10-20 14:50 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106086

--- Comment #2 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Patrick Palka <ppalka@gcc.gnu.org>:

https://gcc.gnu.org/g:909672f02ff75a6a94c88dee4aa41e92edb1d1ed

commit r14-4795-g909672f02ff75a6a94c88dee4aa41e92edb1d1ed
Author: Patrick Palka <ppalka@redhat.com>
Date:   Fri Oct 20 10:50:19 2023 -0400

    c++: non-static memfn call dependence cleanup [PR106086]

    In cp_parser_postfix_expression, and in the CALL_EXPR case of
    tsubst_copy_and_build, we essentially repeat the type-dependent and
    COMPONENT_REF callee cases of finish_call_expr.  This patch deduplicates
    this logic by making both spots consistently go through finish_call_expr.

    This allows us to easily fix PR106086 -- which is about us neglecting to
    capture 'this' when we resolve a use of a non-static member function of
    the current instantiation only at lambda regeneration time -- by moving
    the call to maybe_generic_this_capture from the parser to finish_call_expr
    so that we consider capturing 'this' at regeneration time as well.

            PR c++/106086

    gcc/cp/ChangeLog:

            * parser.cc (cp_parser_postfix_expression): Consolidate three
            calls to finish_call_expr, one to build_new_method_call and
            one to build_min_nt_call_vec into one call to finish_call_expr.
            Don't call maybe_generic_this_capture here.
            * pt.cc (tsubst_copy_and_build) <case CALL_EXPR>: Remove
            COMPONENT_REF callee handling.
            (type_dependent_expression_p): Use t_d_object_e_p instead of
            t_d_e_p for COMPONENT_REF and OFFSET_REF.
            * semantics.cc (finish_call_expr): In the type-dependent case,
            call maybe_generic_this_capture here instead.

    gcc/testsuite/ChangeLog:

            * g++.dg/template/crash127.C: Expect additional error due to
            being able to check the member access expression ahead of time.
            Strengthen the test by not instantiating the class template.
            * g++.dg/cpp1y/lambda-generic-this5.C: New test.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug c++/106086] ICE: trying to capture 'this' in instantiation of generic lambda
  2022-06-26  5:37 [Bug c++/106086] New: ICE: trying to capture 'this' in instantiation of generic lambda ldalessandro at gmail dot com
  2022-07-14 14:20 ` [Bug c++/106086] " ppalka at gcc dot gnu.org
  2023-10-20 14:50 ` cvs-commit at gcc dot gnu.org
@ 2023-10-20 14:51 ` ppalka at gcc dot gnu.org
  2023-10-25 20:21 ` ppalka at gcc dot gnu.org
  3 siblings, 0 replies; 5+ messages in thread
From: ppalka at gcc dot gnu.org @ 2023-10-20 14:51 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106086

Patrick Palka <ppalka at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Assignee|unassigned at gcc dot gnu.org      |ppalka at gcc dot gnu.org
         Resolution|---                         |FIXED
   Target Milestone|---                         |14.0
             Status|NEW                         |RESOLVED

--- Comment #3 from Patrick Palka <ppalka at gcc dot gnu.org> ---
Fixed for GCC 14.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug c++/106086] ICE: trying to capture 'this' in instantiation of generic lambda
  2022-06-26  5:37 [Bug c++/106086] New: ICE: trying to capture 'this' in instantiation of generic lambda ldalessandro at gmail dot com
                   ` (2 preceding siblings ...)
  2023-10-20 14:51 ` ppalka at gcc dot gnu.org
@ 2023-10-25 20:21 ` ppalka at gcc dot gnu.org
  3 siblings, 0 replies; 5+ messages in thread
From: ppalka at gcc dot gnu.org @ 2023-10-25 20:21 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106086

Patrick Palka <ppalka at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           See Also|https://gcc.gnu.org/bugzill |
                   |a/show_bug.cgi?id=100291    |
                 CC|                            |mpolacek at gcc dot gnu.org

--- Comment #4 from Patrick Palka <ppalka at gcc dot gnu.org> ---
*** Bug 100291 has been marked as a duplicate of this bug. ***

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2023-10-25 20:21 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-06-26  5:37 [Bug c++/106086] New: ICE: trying to capture 'this' in instantiation of generic lambda ldalessandro at gmail dot com
2022-07-14 14:20 ` [Bug c++/106086] " ppalka at gcc dot gnu.org
2023-10-20 14:50 ` cvs-commit at gcc dot gnu.org
2023-10-20 14:51 ` ppalka at gcc dot gnu.org
2023-10-25 20:21 ` ppalka at gcc dot gnu.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).