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

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 GitHub
parent 1c778bd001
commit 32603fd5ff
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -482,7 +482,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);
}