Rémi Bernon (@rbernon) commented about tools/widl/parser.y:
| expr ;
-expr: aNUM { $$ = make_exprl(EXPR_NUM, $1); } - | aHEXNUM { $$ = make_exprl(EXPR_HEXNUM, $1); } +expr: aNUM { $$ = make_exprl(EXPR_NUM, &(struct integer){.value = $1}); } + | aHEXNUM { $$ = make_exprl(EXPR_NUM, &(struct integer){.value = $1, .is_hex = TRUE}); } | aDOUBLE { $$ = make_exprd(EXPR_DOUBLE, $1); } - | tFALSE { $$ = make_exprl(EXPR_TRUEFALSE, 0); } - | tNULL { $$ = make_exprl(EXPR_NUM, 0); } - | tTRUE { $$ = make_exprl(EXPR_TRUEFALSE, 1); } + | tFALSE { $$ = make_exprl(EXPR_TRUEFALSE, &(struct integer){.value = 0}); } + | tNULL { $$ = make_exprl(EXPR_NUM, &(struct integer){.value = 0}); } + | tTRUE { $$ = make_exprl(EXPR_TRUEFALSE, &(struct integer){.value = 1}); } | aSTRING { $$ = make_exprs(EXPR_STRLIT, $1); } I don't think we have these constructs anywhere else, and passing a temporary lvalue by address looks questionable.
-- https://gitlab.winehq.org/wine/wine/-/merge_requests/5906#note_74005