Note that Rust does not "use stack" in your snippet, instead it generates sum1 which accepts a pointer to the struct. It may point to any place in memory, not necessary to stack. As for which ABI is better... it depends. Yes, the Rust ABI may result in additional stack usage, but the C++ ABI may result in unnecessary loads and register pollution (e.g. fields b and c in your example). Overall, I don't think it matters much in practice, since small functions for which the difference could be noticeable are likely to be inlined.
Does this mean that the autovectorizer in Rust will do a better job than C++ in the case where C++ is passing some 128 bits parameter via registers? (If both use LLVM)