On 26/05/16 19:49 +0200, Marc Glisse wrote:
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...

Please do.

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.

I have a dream of resurrecting the gnu-versioned-namespace config (and
bumping from std::__7 / libstdc++.so.7 to std::__8 / libstdc++.so.8)
so that people who don't want backwards compatibility can use that
mode, which would enable various nice optimizations that can't be made
in the default mode because of compatibility.

This would be something we should change when that config is in use.
So hopefully if you open a bugzilla entry it won't rot forever, but
only until I realise my dream.

Reply via email to