One minor stylistic observation is that even though it's a C11 compiler, itself written in C11, it holds on to the very Old-Sk00l convention of declaring a function's variables at the top, instead of at point of use.
It's at least very consistent, even the statement after the declaration is an assignment to a variable, that variable is still separately declared above. Example (again, from expr.c):
static struct expr *
mkexpr(enum exprkind k, struct type *t)
{
struct expr *e;
e = xmalloc(sizeof(*e));
Really glad [1] it doesn't cast the return value of the alloc function, at least. :) I would write the body code as {
struct expr * const e = xmalloc(sizeof *e);
The 'const' there makes it impossible to re-assign e, thus leaking the memory, and is IMO a good thing.NOTE: I realize the separate declarations is a stylistic choice and I'm not being critical, I just think it's fun how enduring some theoretically outdated stylistic choices are in C.
[1] https://stackoverflow.com/questions/605845/do-i-cast-the-res...