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
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to