-
Notifications
You must be signed in to change notification settings - Fork 45
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
Update psABI to match Itanium C++ ABI fixes for passing class objects indirectly #6
Comments
Does this patch look OK? |
Yes, thanks, that patch looks good. I wonder if we should also update footnote 14: "An object with either a non-trivial copy constructor or a non-trivial destructor cannot be passed by value because such objects must have well defined addresses. Similar issues apply when returning an object from a function." Perhaps something like: "An object whose type is non-trivial for the purpose of calls cannot be passed by value because such objects must have the same address in the caller and the callee. Similar issues apply when returning an object from a function. See C++17 [class.temporary] paragraph 3." |
Would you mind send me a patch? |
Here: #7 |
indirectly when they have non-trivial or deleted move constructors, or deleted copy constructors or destructors. Fixes hjl-tools#6.
indirectly when they have non-trivial or deleted move constructors, or deleted copy constructors or destructors. Fixes #6.
indirectly when they have non-trivial or deleted move constructors, or deleted copy constructors or destructors. Fixes #6.
… indirectly when they have non-trivial or deleted move constructors, or deleted copy constructors or destructors. Fixes #6.
The Itanium C++ ABI was recently fixed to properly determine whether to pass objects of class type in registers in C++11 onwards, taking move constructors into account:
itanium-cxx-abi/cxx-abi@05fc233
Section 3.2.3 of the x86 psABI should be updated to take this into account. Or better, it should simply defer to the Itanium C++ ABI to determine how to pass C++ classes rather than trying to duplicate the specification.
Eg, something like:
The text was updated successfully, but these errors were encountered: