theraven added inline comments. ================ Comment at: include/__mutex_base:246 @@ -266,3 +245,3 @@ -class _LIBCPP_TYPE_VIS condition_variable +class _LIBCPP_TYPE_VIS condition_variable : private __libcxx_support::condition_variable { ---------------- espositofulvio wrote: > theraven wrote: > > espositofulvio wrote: > > > theraven wrote: > > > > Does this change the ABI for a mutex on *NIX platforms? We can't > > > > change the class layout for existing platforms (though we can indirect > > > > things via typedefs). > > > My hunch is that it doesn't, std::condition_variable has no data member > > > now and the first base class (__libcxx_support::condition_variable) > > > contains only pthread_cond_t which will be effectively laid out at the > > > starting address of the object, as it was previously for > > > std::condition_variable,. I will check this out later in the evening > > > though. > > I *think* that it's correct, but it's worth compiling a program that has > > one compilation unit using the old header and another using the new one and > > check that it's able to interoperate correctly. > > > > Also check whether this depends on the implementation of the condition > > variable. On FreeBSD, the pthread types are all pointers (currently - > > we're going to have some painful ABI breakage at some point when we move > > them to being something that can live in shared memory). In glibc, they're > > structures. I don't think that you'll end up with different padding in the > > ABI from wrapping them in a class, but it's worth checking. > > it's worth compiling a program that has one compilation unit using the old > > header and another using the new one and check that it's able to > > interoperate correctly > > Unfortunately this isn't going to work, some simbols are now defined in > __libcxx_support and not in std (they are just made available through using), > so an object file that includes the old header won't link against the new > library (unreferenced symbols). The alternative is to create inline > forwarding methods. > > > That's going to need some more refactoring then. Breaking the public ABI of libc++ would be a show-stopper.
Repository: rL LLVM http://reviews.llvm.org/D11781 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits