https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78654
--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> --- It is mostly -fsanitize=alignment related on the serpent_generic.i, all the other undefined sanitizers together cause largest frame of size 600 or so. Also, if you use -fsanitize=undefined -fno-sanitize-recover=all then the problem does not exist (608 bytes max frame size). The problem with -fsanitize=alignment if recovery is required is that there is huge amount of those (conditional) calls, if (some_pointer_is_unaligned) __ubsan_handle_* (...); and that of course can't play well with register allocation, because it needs to keep everything live across those calls, and as those calls may clobber call used registers, that means having to push more variables into memory, at least across those calls.