https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114132
Bug ID: 114132 Summary: [avr] Code sets up a frame pointer without need Product: gcc Version: 13.2.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: gjl at gcc dot gnu.org Target Milestone: --- $ avr-gcc -S -Os -mmcu=attiny40 of void funcab_c (long x, char c) { } sets up a frame-pointer without need. Arguments x and c occupy all of the argument registers R25..R20, so that no arg registers are left. Then there is this implementation of TARGET_FRAME_POINTER_REQUIRED in avr.cc: static bool avr_frame_pointer_required_p (void) { return (cfun->calls_alloca || cfun->calls_setjmp || cfun->has_nonlocal_label || crtl->args.info.nregs == 0 || get_frame_size () > 0); } Problem is that crtl->args.info.nregs == 0 does not discriminate between need for arg pointer and no need for arg pointer (but all arg regs are used up, like in the example).