unix: work around arm-linux-gnueabihf-gcc bug (#4565)

Both gcc 11 and 12 emit wrong code for a function call pointer in one
very specific context.

Fixes: https://github.com/libuv/libuv/issues/4532
This commit is contained in:
Ben Noordhuis 2024-09-19 19:53:19 +02:00 committed by Santiago Gimeno
parent 0be52c8251
commit 8d957c56b3
No known key found for this signature in database
GPG Key ID: F28C3C8DA33C03BE

View File

@ -487,7 +487,10 @@ static ssize_t uv__preadv_or_pwritev(int fd,
atomic_store_explicit(cache, (uintptr_t) p, memory_order_relaxed);
}
f = p;
/* Use memcpy instead of `f = p` to work around a compiler bug,
* see https://github.com/libuv/libuv/issues/4532
*/
memcpy(&f, &p, sizeof(p));
return f(fd, bufs, nbufs, off);
}