From 7541edc969cacb6059bf59062c624b1263585347 Mon Sep 17 00:00:00 2001 From: Nick Gasson Date: Mon, 25 Mar 2024 20:54:53 +0000 Subject: [PATCH] Fix undefined behaviour dumping >32 bit integers to FST. Issue #869 --- src/rt/wave.c | 3 ++- test/regress/gold/issue856.dump | 28 ++++++++++++++-------------- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/src/rt/wave.c b/src/rt/wave.c index 1db5aeb0..19a5fed5 100644 --- a/src/rt/wave.c +++ b/src/rt/wave.c @@ -157,7 +157,8 @@ static void fst_fmt_int(rt_watch_t *w, fst_data_t *data) for (int i = 0; i < data->count; i++) { char buf[data->type->size + 1]; for (size_t j = 0; j < data->type->size; j++) - buf[data->type->size - 1 - j] = (val[i] & (1 << j)) ? '1' : '0'; + buf[data->type->size - 1 - j] = + (val[i] & (UINT64_C(1) << j)) ? '1' : '0'; buf[data->type->size] = '\0'; fstWriterEmitValueChange(data->dumper->fst_ctx, data->handle[i], buf); diff --git a/test/regress/gold/issue856.dump b/test/regress/gold/issue856.dump index d4e65e90..fdc1cf34 100644 --- a/test/regress/gold/issue856.dump +++ b/test/regress/gold/issue856.dump @@ -1,14 +1,14 @@ -#0 issue856.b.p[1].g 0000000000000000000000000001101100000000000000000000000000011011 -#0 issue856.b.p[1].f[3].y 0000000000000000000000000000011100000000000000000000000000000111 -#0 issue856.b.p[1].f[3].x 0000000000000000000000000000011000000000000000000000000000000110 -#0 issue856.b.p[1].f[2].y 0000000000000000000000000000010100000000000000000000000000000101 -#0 issue856.b.p[1].f[2].x 0000000000000000000000000000010000000000000000000000000000000100 -#0 issue856.b.p[1].f[1].y 0000000000000000000000000000001100000000000000000000000000000011 -#0 issue856.b.p[1].f[1].x 0000000000000000000000000000001000000000000000000000000000000010 -#0 issue856.s.g 0000000000000000000000000001101100000000000000000000000000011011 -#0 issue856.s.f[3].y 0000000000000000000000000000011100000000000000000000000000000111 -#0 issue856.s.f[3].x 0000000000000000000000000000011000000000000000000000000000000110 -#0 issue856.s.f[2].y 0000000000000000000000000000010100000000000000000000000000000101 -#0 issue856.s.f[2].x 0000000000000000000000000000010000000000000000000000000000000100 -#0 issue856.s.f[1].y 0000000000000000000000000000001100000000000000000000000000000011 -#0 issue856.s.f[1].x 0000000000000000000000000000001000000000000000000000000000000010 +#0 issue856.b.p[1].g 0000000000000000000000000000000000000000000000000000000000011011 +#0 issue856.b.p[1].f[3].y 0000000000000000000000000000000000000000000000000000000000000111 +#0 issue856.b.p[1].f[3].x 0000000000000000000000000000000000000000000000000000000000000110 +#0 issue856.b.p[1].f[2].y 0000000000000000000000000000000000000000000000000000000000000101 +#0 issue856.b.p[1].f[2].x 0000000000000000000000000000000000000000000000000000000000000100 +#0 issue856.b.p[1].f[1].y 0000000000000000000000000000000000000000000000000000000000000011 +#0 issue856.b.p[1].f[1].x 0000000000000000000000000000000000000000000000000000000000000010 +#0 issue856.s.g 0000000000000000000000000000000000000000000000000000000000011011 +#0 issue856.s.f[3].y 0000000000000000000000000000000000000000000000000000000000000111 +#0 issue856.s.f[3].x 0000000000000000000000000000000000000000000000000000000000000110 +#0 issue856.s.f[2].y 0000000000000000000000000000000000000000000000000000000000000101 +#0 issue856.s.f[2].x 0000000000000000000000000000000000000000000000000000000000000100 +#0 issue856.s.f[1].y 0000000000000000000000000000000000000000000000000000000000000011 +#0 issue856.s.f[1].x 0000000000000000000000000000000000000000000000000000000000000010 -- 2.39.2