awi added a subscriber: awi.
awi added a comment.

Hello,
I like your patch very much. I looks similar to my patch from January, so I am 
confident it solves my problem, but it does so a little more elegantly at some 
places.
I tried it with my two sources files main.cpp and main2.cpp. While main.cpp 
works with or without your patch, main2.cpp fails with the current svn head, 
but succeeds with your patch.
After that I executed the libc++ test suite, using `-std=c++1y` as the language 
version. Here, a couple of tests failed to compile. This is not as bad as it 
may sound, though, because I could fix it by adding some missing calls to your 
new `__list_node_base` functions `__as_base()` and `__as_node()`:

  --- include/list      2015-08-25 20:35:00.769897378 +0200
  +++ include/list.corr 2015-08-25 20:10:38.000000000 +0200
  @@ -1362,9 +1362,9 @@
           __node_alloc_traits::construct(__na, 
_VSTD::addressof(__hold->__value_), __x);
           ++__ds;
   #if _LIBCPP_DEBUG_LEVEL >= 2
  -        __r = iterator(__hold.get(), this);
  +        __r = iterator(__hold.get()->__as_base(), this);
   #else
  -        __r = iterator(__hold.get());
  +        __r = iterator(__hold.get()->__as_base());
   #endif
           __hold.release();
           iterator __e = __r;
  @@ -1376,7 +1376,7 @@
               {
                   __hold.reset(__node_alloc_traits::allocate(__na, 1));
                   __node_alloc_traits::construct(__na, 
_VSTD::addressof(__hold->__value_), __x);
  -                __e.__ptr_->__next_ = __hold.get();
  +                __e.__ptr_->__next_ = __hold.get()->__as_base();
                   __hold->__prev_ = __e.__ptr_;
                   __hold.release();
               }
  @@ -1388,7 +1388,7 @@
               {
                   __node_alloc_traits::destroy(__na, _VSTD::addressof(*__e));
                   __node_base_pointer __prev = __e.__ptr_->__prev_;
  -                __node_alloc_traits::deallocate(__na, __e.__ptr_, 1);
  +                __node_alloc_traits::deallocate(__na, 
__e.__ptr_->__as_node(), 1);
                   if (__prev == 0)
                       break;
   #if _LIBCPP_DEBUG_LEVEL >= 2


http://reviews.llvm.org/D12299



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to