This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: tuple move constructor


On Thu, 26 May 2016, Jonathan Wakely wrote:

On 25/05/16 14:54 +0100, Jonathan Wakely wrote:
On 23/05/16 20:39 +0200, Marc Glisse wrote:
Ping

(re-attaching, I just added a one-line comment before the tag class as asked by Ville)

This is OK for trunk - thanks.

On second thoughts - does this change the passing conventions for
std::tuple if it gets a trivial move ctor?

Note that this part of the ABI is ill-defined
http://sourcerytools.com/pipermail/cxx-abi-dev/2016-February/002884.html

but yes, good catch, it does change the passing convention (by value), and not just for weirdo types, it even changes for tuple<int>. It is clearly a change in the right direction, not passing tuple<int> in a register is weird, but yeah, compatibility :-(

I don't even want to think of trying to fix this issue in C++11 while artificially preserving the non-triviality of tuple, the headache is not worth it. I guess I'll open an entry in bugzilla with the ABI tag and let it rot there...

Maybe we could

#if __cpp_concepts >= 201500
the alternative discussed with Ville
#endif

but that won't fix the fact that tuple<int> should be trivially move constructible...

We could add __attribute__(non_trivial_for_purpose_of_passing_convention), but I think abi_tag has already stretched enough the idea that gcc is following the itanium abi.

Bah, forget this patch. Thanks for noticing early, that spares me the trouble of reverting later.

--
Marc Glisse


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]