alloc_align attribute takes parameter number, not the alignment itself,
so given just the attribute/function declaration we can't do any
sanity checking for said alignment.
However, at call site, given the actual Expr that is passed
into that parameter, we might be able to evaluate said Expr
as Integer Constant Expression, and perform the sanity checks.
But since there is no requirement for that argument to be an immediate,
we may fail, and that's okay.
However if we did evaluate, we should enforce the same constraints
as with __builtin_assume_aligned()/__attribute__((assume_aligned(imm))):
said alignment is a power of two, and is not greater than our magic threshold