Fails the same way with a parameter as with a local: int result; void __attribute__((naked)) ISRFunction(int x) { result = subFunction(&x); }
but I'm certainly open to a better explanation of how a user program can trigger an ICE that way. Hmmm... the only use of targetm.calls.allocate_stack_slots_for_args() is in use_register_for_decl() - which is used by expand_decl() for automatic variables. Maybe the hook should have been called allocate_stack_slots_for_decls() ?