https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95859
--- Comment #4 from Tobias Schlüter <tobi at gcc dot gnu.org> --- This is a regression. 9.3 works, producing this assembly with -O2 -m32: func34(m34): fld DWORD PTR [esp+8] mov eax, DWORD PTR [esp+4] fstp QWORD PTR [eax] fld DWORD PTR [esp+24] fstp QWORD PTR [eax+8] fld DWORD PTR [esp+40] fstp QWORD PTR [eax+16] fld DWORD PTR [esp+12] fstp QWORD PTR [eax+24] fld DWORD PTR [esp+28] fstp QWORD PTR [eax+32] fld DWORD PTR [esp+44] fstp QWORD PTR [eax+40] fld DWORD PTR [esp+16] fstp QWORD PTR [eax+48] fld DWORD PTR [esp+32] fstp QWORD PTR [eax+56] fld DWORD PTR [esp+48] fstp QWORD PTR [eax+64] fld DWORD PTR [esp+20] fstp QWORD PTR [eax+72] fld DWORD PTR [esp+36] fstp QWORD PTR [eax+80] fld DWORD PTR [esp+52] fstp QWORD PTR [eax+88] ret 4 I've also thrown some other simple Eigen codes at the compiler, and 10.1 and trunk consistently keep the asserts in place.