[PATCH 0/3] Support for mandatory tail calls

Jeff Law law@redhat.com
Wed May 18 22:12:00 GMT 2016


On 05/17/2016 04:01 PM, David Malcolm wrote:
> There have been requests [1] for libgccjit to better support
> functional programming by supporting the contination-passing style,
> in which every function "returns" by calling a "continuation"
> function pointer.
>
> These calls must be guaranteed to be implemented as a jump,
> otherwise the program could consume an arbitrary amount of stack
> space as it executed.
>
> This patch kit implements this.
>
> Patch 1 is a preliminary tweak to calls.c
>
> Patch 2 implements a new flag in tree.h: CALL_EXPR_MUST_TAIL_CALL,
> which makes calls.c try harder to implement a flagged call as a
> tail-call/sibling call, and makes it issue an error if
> the optimization is impossible.  It doesn't implement any
> frontend support for setting the flag (instead using a plugin
> to test it).  We had some discussion on the jit list about possibly
> introducing a new builtin for this, but the patch punts on this
> issue.
I wonder if we should have an attribute so that the flag can be set for 
C/C++ code.  I've seen requests for forcing tail calls in C/C++ code 
several times in the past, precisely to support continuations.

Jeff



More information about the Gcc-patches mailing list