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

--- Comment #5 from Peter Dimov <pdimov at gmail dot com> ---
Another:

```
struct X
{
    int v;
};

template<int I> struct Y: X
{
};

void f( int v );

void h( unsigned ix, void* p )
{
    switch( ix )
    {
        case 0: f( ((Y<0>*)p)->v ); break;
        case 1: f( ((Y<1>*)p)->v ); break;
        case 2: f( ((Y<2>*)p)->v ); break;
        case 3: f( ((Y<3>*)p)->v ); break;
        case 4: f( ((Y<4>*)p)->v ); break;
        case 5: f( ((Y<5>*)p)->v ); break;
        default: __builtin_unreachable();
    }
}
```

```
h(unsigned int, void*):
  mov edi, edi
  jmp [QWORD PTR .L4[0+rdi*8]]
.L4:
  .quad .L3
  .quad .L3
  .quad .L3
  .quad .L3
  .quad .L3
  .quad .L3
.L3:
  mov edi, DWORD PTR [rsi]
  jmp f(int)
```

https://godbolt.org/z/pGVx6W

This however demonstrates a different problem, so it may need to go into a
separate bug.

Reply via email to