From 3f3db5422397f1bf8d5af1ade256638d89b1081c Mon Sep 17 00:00:00 2001 From: Robin Haberkorn Date: Sun, 23 Aug 2026 21:51:48 +0200 Subject: functions that can tail-call must be tail-called as well Otherwise we could "leak" stack frames, which causes crashes on platforms with small stack sizes. This still did not result in a reproducable speedup with GCC 16. fixup 2e097cec409182c3cb39b74489387480bf8a278f --- src/parser.h | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'src/parser.h') diff --git a/src/parser.h b/src/parser.h index 75a3432..0441a9c 100644 --- a/src/parser.h +++ b/src/parser.h @@ -557,6 +557,8 @@ gboolean teco_machine_main_step(teco_machine_main_t *ctx, #if __has_attribute(musttail) +#define TECO_TAIL __attribute__((musttail)) + /** * Transition from a teco_machine_main input_cb() to another state. * @@ -608,14 +610,14 @@ gboolean teco_machine_main_step(teco_machine_main_t *ctx, \ /* the caller's signature will not line up exactly with input_cb */ \ typedef teco_state_t *(*caller_t)(teco_machine_main_t *, gunichar, GError **); \ - __attribute__((musttail)) return ((caller_t)__state->input_cb)(__ctx, chr, __error); \ + TECO_TAIL return ((caller_t)__state->input_cb)(__ctx, chr, __error); \ } G_STMT_END #else /* __has_attribute(musttail) */ -/* - * This will effectively return into the teco_machine_main_step() loop. - */ +/* leave it to the optimizer (may or may not tail call) */ +#define TECO_TAIL +/* this will effectively return into the teco_machine_main_step() loop */ #define TECO_RETURN(CTX, STATE, ERROR) return (STATE) #endif /* !__has_attribute(musttail) */ -- cgit v1.2.3