| diff --git a/lib/malloca.c b/lib/malloca.c |
| --- a/lib/malloca.c |
| +++ b/lib/malloca.c |
| @@ -68,16 +68,19 @@ |
| /* The ckd_add avoids signed integer overflow on |
| theoretical platforms where UINTPTR_MAX <= INT_MAX. */ |
| uintptr_t umemplus; |
| + idx_t offset; |
| + void *p; |
| + small_t *sp; |
| ckd_add (&umemplus, umem, sizeof (small_t) + sa_alignment_max - 1); |
| - idx_t offset = (umemplus - umemplus % (2 * sa_alignment_max) |
| + offset = (umemplus - umemplus % (2 * sa_alignment_max) |
| + sa_alignment_max - umem); |
| - void *p = mem + offset; |
| + p = mem + offset; |
| /* Here p >= mem + sizeof (small_t), |
| and p <= mem + sizeof (small_t) + 2 * sa_alignment_max - 1 |
| hence p + n <= mem + nplus. |
| So, the memory range [p, p+n) lies in the allocated memory range |
| [mem, mem + nplus). */ |
| - small_t *sp = p; |
| + sp = p; |
| # if defined __CHERI_PURE_CAPABILITY__ |
| sp[-1] = umem; |
| p = (char *) cheri_bounds_set ((char *) p - sizeof (small_t), |