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.