https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86868
Bug ID: 86868 Summary: cc1: warning: stack probing requires '-maccumulate-outgoing-args' for correctness Product: gcc Version: 9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: hjl.tools at gmail dot com CC: ubizjak at gmail dot com Target Milestone: --- Target: i386,x86-64 [hjl@gnu-cfl-1 gcc]$ cat /tmp/x.i extern void foo (void); void bar (void) { foo (); } [hjl@gnu-cfl-1 gcc]$ ./xgcc -B./ -mno-accumulate-outgoing-args -S /tmp/x.i [hjl@gnu-cfl-1 gcc]$ ./xgcc -B./ -mno-accumulate-outgoing-args -S /tmp/x.i -mstack-arg-probe cc1: warning: stack probing requires ‘-maccumulate-outgoing-args’ for correctness [hjl@gnu-cfl-1 gcc]$ But there is #define ACCUMULATE_OUTGOING_ARGS \ ((TARGET_ACCUMULATE_OUTGOING_ARGS \ && optimize_function_for_speed_p (cfun)) \ || (cfun->machine->func_type != TYPE_NORMAL \ && crtl->stack_realign_needed) \ || TARGET_STACK_PROBE \ || TARGET_64BIT_MS_ABI \ || (TARGET_MACHO && crtl->profile)) -mno-accumulate-outgoing-args is a best effort option. GCC generates the same code when /* If stack probes are required, the space used for large function arguments on the stack must also be probed, so enable -maccumulate-outgoing-args so this happens in the prologue. */ if (TARGET_STACK_PROBE_P (opts->x_target_flags) && !(opts->x_target_flags & MASK_ACCUMULATE_OUTGOING_ARGS)) { if (opts_set->x_target_flags & MASK_ACCUMULATE_OUTGOING_ARGS) warning (0, main_args_p ? G_("stack probing requires %<-maccumulate-outgoing-args%> " "for correctness") : G_("stack probing requires " "%<target(\"accumulate-outgoing-args\")%> for " "correctness")); opts->x_target_flags |= MASK_ACCUMULATE_OUTGOING_ARGS; } is removed.