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.