Since GCC 8, the -freorder-blocks-and-partition pass can split a function into hot and cold parts, thus generating 2 FDEs for a single function in DWARF for exception purposes and doing an equivalent trick for Windows SEH on x86-64. Now the Windows system unwinder does not support arbitrarily large frames and there is even a hard limit on the encoding of the CFI, which changes the stack allocation strategy when it is topped and which must be reflected everywhere. I overlooked that when implementing the -freorder-blocks-and-partition support back in 2018 and this results in an ICE when gigantic frames, like e.g. in the attached Ada testcase. Bootstrapped on x86-64/Windows, applied on all active branches as obvious. 2021-04-19 Eric Botcazou * config/i386/winnt.c (i386_pe_seh_cold_init): Properly deal with frames larger than the SEH maximum frame size. 2021-04-19 Eric Botcazou * gnat.dg/opt92.adb: New test. -- Eric Botcazou