On Linux, e.g. in os.zig the std lib will often interrogate errno and map to Zig errors, or unreachable if the std lib wants to assert that the std lib implementation would never cause an EINVAL or EFAULT, e.g.:
EINVAL => unreachable,
EFAULT => unreachable,
However, while implementing #6356, I was about to follow this pattern but then I realized that the kernel often overloads errors in new kernel versions, which is particularly the case for the io_uring syscalls.
This means that we might think our std lib implementation cannot cause EINVAL, and then the kernel adds a new feature which could, leading to undefined behavior instead of a safe error.
In other words, we need to start going through the std lib and make this usage of unreachable an anti-pattern because there's no way we can assert what the kernel can or cannot be returning like this.
On Linux, e.g. in
os.zigthe std lib will often interrogateerrnoand map to Zig errors, orunreachableif the std lib wants to assert that the std lib implementation would never cause anEINVALorEFAULT, e.g.:However, while implementing #6356, I was about to follow this pattern but then I realized that the kernel often overloads errors in new kernel versions, which is particularly the case for the
io_uringsyscalls.This means that we might think our std lib implementation cannot cause
EINVAL, and then the kernel adds a new feature which could, leading to undefined behavior instead of a safe error.In other words, we need to start going through the std lib and make this usage of
unreachablean anti-pattern because there's no way we can assert what the kernel can or cannot be returning like this.