Re: [PATCH 3/4] cg: reject clauses using return() by default

Nick Alcock
2025-07-15T10:51:57Z

On 15 Jul 2025, Nick Alcock spake thusly:

> On 15 Jul 2025, Kris Van Hees verbalised:
>
>> Signed-off-by: Kris Van Hees <kris.van.hees@oracle.com>
>
> Reviewed-by: Nick Alcock <nick.alcock@oracle.com>
>
>> ---
>> libdtrace/dt_cg.c | 10 +++++++++-
>> libdtrace/dt_errtags.h | 1 +
>> libdtrace/dtrace.h | 19 ++++++++++---------
>> 3 files changed, 20 insertions(+), 10 deletions(-)
>>
>> diff --git a/libdtrace/dt_cg.c b/libdtrace/dt_cg.c
>> index 738597ed..0607cd4e 100644
>> --- a/libdtrace/dt_cg.c
>> +++ b/libdtrace/dt_cg.c
>> @@ -875,6 +875,10 @@ dt_cg_call_clause(dtrace_hdl_t *dtp, dtrace_stmtdesc_t *sdp, dt_clause_arg_t *ar
>> */
>> if (prp->prov->impl->reject_clause != NULL)
>> prp->prov->impl->reject_clause(prp, sdp->dtsd_clauseflags);
>> + else if (sdp->dtsd_clauseflags & DT_CLSFLAG_RETURN)
>> + xyerror(D_ACT_RETURN, "return() not allowed for %s:%s:%s:%s\n",
>> + prp->desc->prv, prp->desc->mod, prp->desc->fun,
>> + prp->desc->prb);
>
> Ah, I guess these are the "default checks" given in the previous commit,
> so you can just set up the reject_clause() if destructive mode is on,
> and not need to check here at all.

No, nonsense -- dt_cg_clsflags turns on the destructive flag whenever it
turns on the return flag. Which is fine. (This behaviour is still
somewhat irregular, but I guess if anything can have special handling in
dt_cg_call_clause it would be something named return :) )

--
NULL && (void)