espositofulvio 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
{
----------------
theraven wrote:
> 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.
Yes, that's what I thought. In this case it's better to create a new diff and
abandon this one or just update it?
Repository:
rL LLVM
http://reviews.llvm.org/D11781
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits