https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108868
--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
That would be invalid, vfork can't return from the containing function.
Anyway, reduced testcase which shows the .ABNORMAL_DISPATCHER call in r13-5964
and none in r13-5965 in optimized is e.g. with just -O2:
int x;
int vfork (void) __attribute__((__leaf__, __returns_twice__));
int fork (void);
void bar (int, int, int *);
void
foo (void)
{
int b = 0;
int r = x ? vfork () : fork ();
bar (r, x, &b);
}
This could be valid, as bar could e.g. for the first argument equal to 0 execve
or _exit. It doesn't show the spill slot clobbering though.