https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103646
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jakub at gcc dot gnu.org --- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> --- The driver does what it has been configured to. The default for x86_64-linux compiler is x86-64 arch even for 32-bit code, Fedora GCC is configured with --with-arch_32=i686 and therefore it defaults to -march=i686. I don't really see a bug here. With -O0 the testcase is rejected with either -march=i686 or -march=x86-64, similarly with -O0 -mstackrealign, with -O2 it is accepted for both, with -O2 -mstackrealign only for i686; all this depends on whether frame pointer is used or not. The reason why x86-64 rejects it and i686 doesn't in the last case is SLP vectorization of the t->tv_sec = 0; t->tv_usec = 1; stores, due to that we actually want to realign in the prologue and that results in %ebp being used as frame pointer and so can't be used in the local register variable. -mno-sse or -fno-tree-vectorize will make it compile.