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

--- Comment #3 from Jaak Ristioja <jaak at ristioja dot ee> ---
(In reply to Markus Trippelsdorf from comment #1)
> template <typename Cmd> struct K {
>   using CmdSP = std::D<typename Cmd::CommandType>;
>   template <typename... Args> void operator()(Args... args) {
>     using MakeFunc = CmdSP(...);
>     MakeFunc makeFuncs;
>     [=] { [=] { makeFuncs(args...); }; };
>   }
> };
...
> main.ii: In member function ‘void state::gen::K<Cmd>::operator()(Args ...)
> [with Args = {int}; Cmd = Get]’:
> main.ii:79:36: internal compiler error: in execute, at cfgexpand.c:6069

We hit a similar case in our proprietary production code, which compiled with
-O2 resulted in a segmentation fault, but when compiled with -O0, resulted in
this ICE.

Here is a smaller test-case to trigger this ICE with -std=c++11 -O0:

    void b(int) {}

    template <typename ... Args>
    void f(Args && ... args) {
        [&] {
            [&] {
                b(args...);
            };
        };
    }

    int main() { f(2); }

// gcc (Gentoo Hardened 5.4.0-r3 p1.3, pie-0.6.5) 5.4.0

Dunno, if it is relevant, but here is some of the <censored> disassembly output
at proprietary crash site with -O2 (attempting to read 1 byte from address 0x0,
according to Valgrind):

   0x000000105aa024ab <+1643>:  mov    %rax,%rbx
   0x000000105aa024ae <+1646>:  movl   $0x1,0x8(%rax)
   0x000000105aa024b5 <+1653>:  movl   $0x1,0xc(%rax)                           
   0x000000105aa024bc <+1660>:  lea    0x2a7f35(%rip),%rax      #<vtable for
std::_Sp_counted_ptr_inplace<MyClass, std::allocator<MyClass>,
(__gnu_cxx::_Lock_policy)2>                                                     
=> 0x000000105aa024c3 <+1667>:  movzbl 0x0,%ecx

Reply via email to