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.