This function causes an ICE in rtl generation: void g() { __builtin_eh_return(0, 0); }
The crash happens when either operand to __builtin_eh_return is an integer constant. expand_builtin_eh_return calls copy_to_reg on a CONST_INT operand. copy_to_reg generates a register with mode VOIDmode. I think the fix is to change the two calls to copy_to_reg to copy_addr_to_reg in expand_builtin_eh_return. This bug seems to be present for many versions and on at least two targets, x86 and SPARC. Note that with optimization on the same crash may occur if a variable known to hold an integer constant value is passed as the first argument. -- Summary: ICE with constant argument to __builtin_eh_return Product: gcc Version: 4.3.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: middle-end AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: jfc at mit dot edu GCC host triplet: x86_64-linux-gnu http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36791