I’m happy that unwinding is finally fixed: that was the biggest unknown for me. I’m also happy that we have very few UI tests from the Rust test suite that fail now: there are still some other test suites to run, but having only 21 failures among the UI tests is a big achievement.


It depends what you mean by “fully ready”, but this is unlikely. By “fully ready”, do you mean feature-complete, without any known bugs, working on all GCC targets? Even with only x86-64, I don’t expect to have all features: for instance, I don’t plan on adding support for sanitizers/code coverage/PGO this year. And some stuff is outside my control: for instance, this Rust PR that will allow me to fix some ABI issues (unblocking, among other things, Aarch64) is waiting for review.
Nothing complicated remains as far as I know. I don’t think LLVM-isms is an issue anymore, so I would expect close to full parity to be possible (expect maybe supporting Thin LTO). The big remaining tasks are:
There are Rust intrinsic fallbacks now, but I do not think all intrinsics have a fallback. And I’m not sure this applies to platform intrinsics.
Compile times were never been a priority. At first, I thought libgccjit might be slower than GCC since it’s not used much, but having used it for another project, it does not seem to be the case. My hunch is that since we need some hacks to convert from the lower-level IR MIR to the higher-level GCC IR, it’s going to be hard to generate a very good IR in the end. So, we get a MIR that is not super optimized in terms of compile times and make it worse, so the impact on compile times probably lies there.
Thank you for your detailed reply.
Focusing on x86_64 (and linux), can you expand on what’s missing to reach ABI parity?
And somewhat relatedly, are you leaning towards publishing an std component built with the backend or not?
I haven’t look much into it, but perhaps the
sretfix mentioned above would fix some issues on x86-64. For the rest, this is mostly bug fixing (we probably don’t handle the alignment everywhere) and fuzzing with ABI cafe.I haven’t thought much about this, but I guess an idea would be to ship a std for targets not supported by LLVM.