https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87205
--- Comment #10 from Martin Liška <marxin at gcc dot gnu.org> --- (In reply to Peter Dimov from comment #8) > (In reply to Martin Liška from comment #7) > > I'm not sure here Y<N> are different types here and member access based on > > the type is distinct. > > Yes, one could argue that, I suppose. But in the `return ((Y<0>*)p)->v;` > case the member access _is_ lifted outside the jump table. If that's correct > there, it should also be correct here. :-) Yes, it's hoisted out (lifted). But it happens very late in optimization pipeline, that's why we create first jump table and later we isolate the expression.