-
Notifications
You must be signed in to change notification settings - Fork 12.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
librustc_codegen_llvm: Don't eliminate empty structs in C ABI on linux-sparc64 #57085
Conversation
r? @oli-obk (rust_highfive has picked a reviewer for you, use r? to override) |
I don't know anything about SPARC and have not been able to find the referenced document by some quick googling |
Ah, this could be a typo. It could be version "2.4.1" of the SPARC Compliance Definition, not "4.2.1". Let me check. CC @karcherm |
Yep, it's 2.4.1, not 4.2.1. See: http://sparc.org/technical-documents/specifications/ Let me push a fixed version. |
cd69efe
to
fe0b3d1
Compare
Quoting page 48 from the PDF (http://sparc.org/wp-content/uploads/2014/01/SCD.2.4.1.pdf.gz):
|
fe0b3d1
to
970747e
Compare
…x-sparc64 This is in accordance with the SPARC Compliance Definition 2.4.1, Page 3P-12. It says that structs of up to 8 bytes (which applies to empty structs as well) are to be passed in one register.
970747e
to
65dabd6
Compare
Ultimately what matters here is how clang/gcc behave here. clang crashes when provided with 0-sized arguments and gcc properly allocates the input registers for those, so... @bors r+ |
📌 Commit 65dabd6 has been approved by |
That being said, I believe that linux uses sysv on sparc(64), just like almost everywhere else, which may or may not match the vendor’s documentation at all. I only have the sysv document for 32-bit SPARC around (so can’t say much about 64-bit) and it does not appear to call out a similar requirement on my quick read-through. |
librustc_codegen_llvm: Don't eliminate empty structs in C ABI on linux-sparc64 This is in accordance with the SPARC Compliance Definition 2.4.1, Page 3P-12. It says that structs of up to 8 bytes (which applies to empty structs as well) are to be passed in one register.
Rollup of 10 pull requests Successful merges: - #55470 (box: Add documentation for `From` impls) - #56242 (Add missing link in docs) - #56944 (bootstrap: Link LLVM as a dylib with ThinLTO) - #56978 (Add `std::os::fortanix_sgx` module) - #56985 (Allow testing pointers for inboundedness while forbidding dangling pointers) - #56986 (rustc: Move jemalloc from rustc_driver to rustc) - #57010 (Actually run compiletest tests on CI) - #57021 (Enable emission of alignment attrs for pointer params) - #57074 (Fix recursion limits) - #57085 (librustc_codegen_llvm: Don't eliminate empty structs in C ABI on linux-sparc64) Failed merges: r? @ghost
☔ The latest upstream changes (presumably #57094) made this pull request unmergeable. Please resolve the merge conflicts. |
This is in accordance with the SPARC Compliance Definition 2.4.1,
Page 3P-12. It says that structs of up to 8 bytes (which applies
to empty structs as well) are to be passed in one register.