-
Notifications
You must be signed in to change notification settings - Fork 13.3k
librustc_codegen_llvm: Pass bitflags as raw integral types for FFI (#61306) #61867
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
Conversation
Thanks for the pull request, and welcome! The Rust team is excited to review your changes, and you should hear from @petrochenkov (or someone else) soon. If any changes to this PR are deemed necessary, please add them as extra commits. This ensures that the reviewer can see what has changed since they last reviewed the code. Due to the way GitHub handles out-of-date commits, this should also make it reasonably obvious what issues have or haven't been addressed. Large or tricky changes may require several passes of review and changes. Please see the contribution instructions for more information. |
I think you need to adjust the imports used:
Since you no longer use DISPFlags. |
The job Click to expand the log.
I'm a bot! I can only do what humans tell me to, so if this was not helpful or you have suggestions for improvements, please ping or otherwise contact |
…ust-lang#61306) The C++ side uses enums with underlying integral types. However, Rust's bitflags types are a single-field struct containing an integral type, which are not always passed the same way in the C ABI. In particular, sparc64's ABI extends integral types to a full 64-bit value, but does not do the same for single-field structs. Thanks to Michael Karcher for finding this bug.
@glaubitz Travis has now passed that error, could you please retry? |
Already working on it :). |
I can confirm that this patch fixes the problem for me. Will do a full rebuild now just to be sure there are no side effects. |
Oh, I just realized you changed the patch quite a lot. I used the first version of the patch and just removed the unused import. |
I have just finished testing the latest version of the patch and I can confirm it fixes the problem for me. I just cross-built |
I suspect that you may be able to put |
Okay, testing this change now:
|
This seems to work:
|
I have created #61881 now. |
Closing in favor of #61881 |
The C++ side uses enums with underlying integral types. However, Rust's bitflags types are a single-field struct containing an integral type, which are not always passed the same way in the C ABI. In particular, sparc64's ABI extends integral types to a full 64-bit value, but does not do the same for single-field structs. Thanks to Michael Karcher for finding this bug.