https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119492
Bug ID: 119492 Summary: missing tail call due to address of the argument taken but NOT escaping Product: gcc Version: 15.0 Status: UNCONFIRMED Keywords: FIXME, missed-optimization, tail-call Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: pinskia at gcc dot gnu.org Target Milestone: --- Take: ``` __attribute__((noinline)) void f(int *a) { *a = 0; } int l(int); int h(int a) { f(&a); [[clang::musttail]] return l(a); } ``` This fails due to: <source>:12:11: error: cannot tail-call: address of caller arguments taken Which is from: ``` /* ??? It is OK if the argument of a function is taken in some cases, but not in all cases. See PR15387 and PR19616. Revisit for 4.1. */ for (param = DECL_ARGUMENTS (current_function_decl); param; param = DECL_CHAIN (param)) if (TREE_ADDRESSABLE (param)) { maybe_error_musttail (call, _("address of caller arguments taken"), diag_musttail); return false; } ```