https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117469

            Bug ID: 117469
           Summary: returns_twice on defined functions
           Product: gcc
           Version: 15.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: amonakov at gcc dot gnu.org
  Target Milestone: ---

It is not really possible to define (not just declare) a returns_twice function
in C. The only possibilities I see are:

1) a "naked" function, on targets where that's supported;

2) a weak function, where the dummy definition returns normally, but the
link-time replacement (not written in C) really returns twice;

and there's a third alternative, which users could plausibly expect to work,
but we can not guarantee that:

3) the C code attempts to tail-call another function (which does return twice).

This third alternative is broken:

a) at -O0,
b) if sibcall transform fails for any reason,
c) if another function is not annotated with returns_twice (and our function is
inlined, for example).

I guess diagnostics for any of this is too much work, but extending our
documentation to reflect this could be reasonable.

Reply via email to