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

Martin Liška <marxin at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |ASSIGNED
   Last reconfirmed|                            |2017-12-29
           Assignee|unassigned at gcc dot gnu.org      |marxin at gcc dot 
gnu.org
     Ever confirmed|0                           |1
           Severity|normal                      |enhancement

--- Comment #3 from Martin Liška <marxin at gcc dot gnu.org> ---
Confirmed, ICF is called for:

std::__introsort_loop<int*, long int,
__gnu_cxx::__ops::_Iter_comp_iter<main()::<lambda(auto:17, auto:18)> > > (int *
__first, int * __last, long int __depth_limit, struct _Iter_comp_iter __comp)

and

std::__introsort_loop<int*, long int,
__gnu_cxx::__ops::_Iter_comp_iter<main()::<lambda(auto:15, auto:16)> > > (int *
__first, int * __last, long int __depth_limit, struct _Iter_comp_iter __comp)

and we bail out because of last argument is different:

$24 = void
(gdb) p debug_tree(parm1)
 <record_type 0x7ffff5ef87e0 _Iter_comp_iter needs-constructing type_1 type_5
type_6 QI
    size <integer_cst 0x7ffff6814f60 type <integer_type 0x7ffff68310a8
bitsizetype> constant 8>
    unit-size <integer_cst 0x7ffff6814f78 type <integer_type 0x7ffff6831000
sizetype> constant 1>
    align:8 warn_if_not_align:0 symtab:0 alias-set 38 canonical-type
0x7ffff5ef87e0
    fields <function_decl 0x7ffff5efac00 __ct 
        type <method_type 0x7ffff5efcd20 type <void_type 0x7ffff6831f18 void>
            QI size <integer_cst 0x7ffff6814f60 8> unit-size <integer_cst
0x7ffff6814f78 1>
            align:8 warn_if_not_align:0 symtab:0 alias-set -1 canonical-type
0x7ffff5efcc78 method basetype <record_type 0x7ffff5ef87e0 _Iter_comp_iter>
            arg-types <tree_list 0x7ffff5efe190 value <pointer_type
0x7ffff5ef8a80>
                chain <tree_list 0x7ffff5efe168 value <reference_type
0x7ffff5efcbd0>
                    chain <tree_list 0x7ffff6827898 value <void_type
0x7ffff6831f18 void>>>>
            throws <tree_list 0x7ffff6968d98
                purpose <deferred_noexcept 0x7ffff6951c48>>>
        abstract external in_system_header autoinline decl_3 decl_5 QI
/home/marxin/bin/gcc/include/c++/8.0.0/bits/predefined_ops.h:130:12 align:16
warn_if_not_align:0 context <record_type 0x7ffff5ef87e0 _Iter_comp_iter>
        full-name "constexpr
__gnu_cxx::__ops::_Iter_comp_iter<main()::<lambda(auto:17, auto:18)>
>::_Iter_comp_iter(__gnu_cxx::__ops::_Iter_comp_iter<main()::<lambda(auto:17,
auto:18)> >&&) noexcept (<uninstantiated>)"
        not-really-extern
        chain <function_decl 0x7ffff5efae00 __ct_base  type <method_type
0x7ffff5efcd20>
            external in_system_header autoinline decl_3 decl_5 QI
/home/marxin/bin/gcc/include/c++/8.0.0/bits/predefined_ops.h:130:12 align:16
warn_if_not_align:0 context <record_type 0x7ffff5ef87e0 _Iter_comp_iter>
abstract_origin <function_decl 0x7ffff5efac00 __ct >
            full-name "constexpr
__gnu_cxx::__ops::_Iter_comp_iter<main()::<lambda(auto:17, auto:18)>
>::_Iter_comp_iter(__gnu_cxx::__ops::_Iter_comp_iter<main()::<lambda(auto:17,
auto:18)> >&&) noexcept (<uninstantiated>)"
            not-really-extern chain <function_decl 0x7ffff5efad00 __ct_comp >>>
context <namespace_decl 0x7ffff6149ab0 __ops>
    full-name "struct
__gnu_cxx::__ops::_Iter_comp_iter<main()::<lambda(auto:17, auto:18)> >"
    needs-constructor X(constX&) this=(X&) n_parents=0 use_template=1
interface-unknown
    pointer_to_this <pointer_type 0x7ffff5ef8a80> reference_to_this
<reference_type 0x7ffff5efcb28> chain <type_decl 0x7ffff5ef0ab0
_Iter_comp_iter>>

$25 = void
(gdb) p debug_tree(parm2)
 <record_type 0x7ffff5ef3000 _Iter_comp_iter needs-constructing type_1 type_5
type_6 QI
    size <integer_cst 0x7ffff6814f60 type <integer_type 0x7ffff68310a8
bitsizetype> constant 8>
    unit-size <integer_cst 0x7ffff6814f78 type <integer_type 0x7ffff6831000
sizetype> constant 1>
    align:8 warn_if_not_align:0 symtab:0 alias-set 34 canonical-type
0x7ffff5ef3000
    fields <function_decl 0x7ffff5ef5b00 __ct 
        type <method_type 0x7ffff5ef8690 type <void_type 0x7ffff6831f18 void>
            QI size <integer_cst 0x7ffff6814f60 8> unit-size <integer_cst
0x7ffff6814f78 1>
            align:8 warn_if_not_align:0 symtab:0 alias-set -1 canonical-type
0x7ffff5ef85e8 method basetype <record_type 0x7ffff5ef3000 _Iter_comp_iter>
            arg-types <tree_list 0x7ffff5e61be0 value <pointer_type
0x7ffff5ef32a0>
                chain <tree_list 0x7ffff5e61bb8 value <reference_type
0x7ffff5ef8540>
                    chain <tree_list 0x7ffff6827898 value <void_type
0x7ffff6831f18 void>>>>
            throws <tree_list 0x7ffff6968d98
                purpose <deferred_noexcept 0x7ffff6951c48>>>
        abstract external in_system_header autoinline decl_3 decl_5 QI
/home/marxin/bin/gcc/include/c++/8.0.0/bits/predefined_ops.h:130:12 align:16
warn_if_not_align:0 context <record_type 0x7ffff5ef3000 _Iter_comp_iter>
        full-name "constexpr
__gnu_cxx::__ops::_Iter_comp_iter<main()::<lambda(auto:15, auto:16)>
>::_Iter_comp_iter(__gnu_cxx::__ops::_Iter_comp_iter<main()::<lambda(auto:15,
auto:16)> >&&) noexcept (<uninstantiated>)"
        not-really-extern
        chain <function_decl 0x7ffff5ef5d00 __ct_base  type <method_type
0x7ffff5ef8690>
            external in_system_header autoinline decl_3 decl_5 QI
/home/marxin/bin/gcc/include/c++/8.0.0/bits/predefined_ops.h:130:12 align:16
warn_if_not_align:0 context <record_type 0x7ffff5ef3000 _Iter_comp_iter>
abstract_origin <function_decl 0x7ffff5ef5b00 __ct >
            full-name "constexpr
__gnu_cxx::__ops::_Iter_comp_iter<main()::<lambda(auto:15, auto:16)>
>::_Iter_comp_iter(__gnu_cxx::__ops::_Iter_comp_iter<main()::<lambda(auto:15,
auto:16)> >&&) noexcept (<uninstantiated>)"
            not-really-extern chain <function_decl 0x7ffff5ef5c00 __ct_comp >>>
context <namespace_decl 0x7ffff6149ab0 __ops>
    full-name "struct
__gnu_cxx::__ops::_Iter_comp_iter<main()::<lambda(auto:15, auto:16)> >"
    needs-constructor X(constX&) this=(X&) n_parents=0 use_template=1
interface-unknown
    pointer_to_this <pointer_type 0x7ffff5ef32a0> reference_to_this
<reference_type 0x7ffff5ef8498> chain <type_decl 0x7ffff5ef0260
_Iter_comp_iter>>

which is a compiler generated record with function pointers (which can be
proved to be equal).
That's another level of comparison that we are currently unable to do.

Reply via email to