The gnu32 job segfaulted in #382 because of an i686 ABI mismatch between Clang-compiled libkj (the nixpkgs default for capnproto) and GCC-compiled libmultiprocess.
Clang and GCC handle empty struct arguments differently on i686: Clang omits them, while GCC reserves a stack slot.
When the fn.invoke() call in the PassField overload for Proxy.Context fails with an uncaught exception, kj::str(exception) calls kj::operator*(kj::_::Stringifier, const kj::Exception&) with Stringifier as an empty struct. As a result, the Clang-compiled callee reads Exception& from the stack slot reserved by the GCC-compiled caller for Stringifier, thereby causing an invalid read.
This PR builds capnproto with GCC in the gnu32 job, so both sides agree on the layout.
The same crash happened in #218, where it was worked around with getDescription().