emit: fix aliasing-breaking pointer dereference via union

emit.c:186:50: error: dereferencing type-punned pointer will break strict-aliasing rules [-Werror=strict-aliasing]

Bug: https://bugs.gentoo.org/976975
This commit is contained in:
Haelwenn (lanodan) Monnier 2026-06-07 02:20:47 +02:00 committed by Quentin Carbonneaux
parent c0818978ac
commit fa19d3c974

9
emit.c
View File

@ -160,6 +160,7 @@ emitfin(FILE *f, char *sec[3])
Asmbits *b; Asmbits *b;
int lg, i; int lg, i;
union { int32_t i; float f; } u; union { int32_t i; float f; } u;
union { int64_t i; double f; } uu;
if (!stash) if (!stash)
return; return;
@ -178,13 +179,13 @@ emitfin(FILE *f, char *sec[3])
"\n\t.quad %"PRId64 "\n\t.quad %"PRId64
"\n\t.quad 0\n\n", "\n\t.quad 0\n\n",
(int64_t)b->n); (int64_t)b->n);
else if (lg == 3) else if (lg == 3) {
uu.i = b->n;
fprintf(f, fprintf(f,
"\n\t.quad %"PRId64 "\n\t.quad %"PRId64
" /* %f */\n\n", " /* %f */\n\n",
(int64_t)b->n, uu.i, uu.f);
*(double *)&b->n); } else if (lg == 2) {
else if (lg == 2) {
u.i = b->n; u.i = b->n;
fprintf(f, fprintf(f,
"\n\t.int %"PRId32 "\n\t.int %"PRId32