On Fri, Apr 16, 2021 at 10:58 PM Willy Tarreau <w@xxxxxx> wrote: > > No, two: > - ok in %rax (seems like it's "!ok" technically speaking since it > returns 1 on !ok and 0 on ok) > - foo_or_err in %rdx Yes, but that is the implementation -- conceptually you only have one or the other, and Rust won't allow you to use the wrong one. > However then I'm bothered because Miguel's example showed that regardless > of OK, EINVAL was always returned in foo_or_err, so maybe it's just > because his example was not well chosen but it wasn't very visible from > the source: That is the optimizer being fancy since the error can be put unconditionally in `rdx`. If you compile: pub fn it_is_ok() -> KernelResult<Bar> { Ok(Bar) } you will see it just clears `rax`. Cheers, Miguel