[libcxx] r340823 - Use addressof instead of operator& in make_shared. Fixes PR38729. As a drive-by, make the same change in raw_storage_iterator (twice).

Hans Wennborg via cfe-commits cfe-commits at lists.llvm.org
Thu Aug 30 01:20:11 PDT 2018


Merged to 7.0 in r341034.

On Tue, Aug 28, 2018 at 3:29 PM, Marshall Clow via cfe-commits
<cfe-commits at lists.llvm.org> wrote:
> Author: marshall
> Date: Tue Aug 28 06:29:30 2018
> New Revision: 340823
>
> URL: http://llvm.org/viewvc/llvm-project?rev=340823&view=rev
> Log:
> Use addressof instead of operator& in make_shared. Fixes PR38729. As a drive-by, make the same change in raw_storage_iterator (twice).
>
> Modified:
>     libcxx/trunk/include/memory
>     libcxx/trunk/test/std/utilities/memory/storage.iterator/raw_storage_iterator.base.pass.cpp
>     libcxx/trunk/test/std/utilities/memory/storage.iterator/raw_storage_iterator.pass.cpp
>     libcxx/trunk/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.create/allocate_shared.pass.cpp
>     libcxx/trunk/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.create/make_shared.pass.cpp
>
> Modified: libcxx/trunk/include/memory
> URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/memory?rev=340823&r1=340822&r2=340823&view=diff
> ==============================================================================
> --- libcxx/trunk/include/memory (original)
> +++ libcxx/trunk/include/memory Tue Aug 28 06:29:30 2018
> @@ -1989,10 +1989,10 @@ public:
>      _LIBCPP_INLINE_VISIBILITY explicit raw_storage_iterator(_OutputIterator __x) : __x_(__x) {}
>      _LIBCPP_INLINE_VISIBILITY raw_storage_iterator& operator*() {return *this;}
>      _LIBCPP_INLINE_VISIBILITY raw_storage_iterator& operator=(const _Tp& __element)
> -        {::new(&*__x_) _Tp(__element); return *this;}
> +        {::new(_VSTD::addressof(*__x_)) _Tp(__element); return *this;}
>  #if _LIBCPP_STD_VER >= 14
>      _LIBCPP_INLINE_VISIBILITY raw_storage_iterator& operator=(_Tp&& __element)
> -        {::new(&*__x_) _Tp(_VSTD::move(__element)); return *this;}
> +        {::new(_VSTD::addressof(*__x_)) _Tp(_VSTD::move(__element)); return *this;}
>  #endif
>      _LIBCPP_INLINE_VISIBILITY raw_storage_iterator& operator++() {++__x_; return *this;}
>      _LIBCPP_INLINE_VISIBILITY raw_storage_iterator  operator++(int)
> @@ -3682,7 +3682,7 @@ private:
>      virtual void __on_zero_shared_weak() _NOEXCEPT;
>  public:
>      _LIBCPP_INLINE_VISIBILITY
> -    _Tp* get() _NOEXCEPT {return &__data_.second();}
> +    _Tp* get() _NOEXCEPT {return _VSTD::addressof(__data_.second());}
>  };
>
>  template <class _Tp, class _Alloc>
>
> Modified: libcxx/trunk/test/std/utilities/memory/storage.iterator/raw_storage_iterator.base.pass.cpp
> URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/memory/storage.iterator/raw_storage_iterator.base.pass.cpp?rev=340823&r1=340822&r2=340823&view=diff
> ==============================================================================
> --- libcxx/trunk/test/std/utilities/memory/storage.iterator/raw_storage_iterator.base.pass.cpp (original)
> +++ libcxx/trunk/test/std/utilities/memory/storage.iterator/raw_storage_iterator.base.pass.cpp Tue Aug 28 06:29:30 2018
> @@ -15,6 +15,13 @@
>
>  #include "test_macros.h"
>
> +#if TEST_STD_VER >= 11
> +#define DELETE_FUNCTION = delete
> +#else
> +#define DELETE_FUNCTION
> +#endif
> +
> +
>  int A_constructed = 0;
>
>  struct A
> @@ -27,6 +34,7 @@ public:
>      ~A() {--A_constructed; data_ = 0;}
>
>      bool operator==(int i) const {return data_ == i;}
> +    A* operator& () DELETE_FUNCTION;
>  };
>
>  int main()
>
> Modified: libcxx/trunk/test/std/utilities/memory/storage.iterator/raw_storage_iterator.pass.cpp
> URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/memory/storage.iterator/raw_storage_iterator.pass.cpp?rev=340823&r1=340822&r2=340823&view=diff
> ==============================================================================
> --- libcxx/trunk/test/std/utilities/memory/storage.iterator/raw_storage_iterator.pass.cpp (original)
> +++ libcxx/trunk/test/std/utilities/memory/storage.iterator/raw_storage_iterator.pass.cpp Tue Aug 28 06:29:30 2018
> @@ -16,6 +16,12 @@
>  #include "test_macros.h"
>  #include <MoveOnly.h>
>
> +#if TEST_STD_VER >= 11
> +#define DELETE_FUNCTION = delete
> +#else
> +#define DELETE_FUNCTION
> +#endif
> +
>  int A_constructed = 0;
>
>  struct A
> @@ -28,6 +34,7 @@ public:
>      ~A() {--A_constructed; data_ = 0;}
>
>      bool operator==(int i) const {return data_ == i;}
> +    A* operator& () DELETE_FUNCTION;
>  };
>
>  int main()
>
> Modified: libcxx/trunk/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.create/allocate_shared.pass.cpp
> URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.create/allocate_shared.pass.cpp?rev=340823&r1=340822&r2=340823&view=diff
> ==============================================================================
> --- libcxx/trunk/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.create/allocate_shared.pass.cpp (original)
> +++ libcxx/trunk/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.create/allocate_shared.pass.cpp Tue Aug 28 06:29:30 2018
> @@ -23,6 +23,12 @@
>  #include "test_allocator.h"
>  #include "min_allocator.h"
>
> +#if TEST_STD_VER >= 11
> +#define DELETE_FUNCTION = delete
> +#else
> +#define DELETE_FUNCTION
> +#endif
> +
>  int new_count = 0;
>
>  struct A
> @@ -37,6 +43,8 @@ struct A
>
>      int get_int() const {return int_;}
>      char get_char() const {return char_;}
> +
> +    A* operator& () DELETE_FUNCTION;
>  private:
>      int int_;
>      char char_;
>
> Modified: libcxx/trunk/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.create/make_shared.pass.cpp
> URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.create/make_shared.pass.cpp?rev=340823&r1=340822&r2=340823&view=diff
> ==============================================================================
> --- libcxx/trunk/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.create/make_shared.pass.cpp (original)
> +++ libcxx/trunk/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.create/make_shared.pass.cpp Tue Aug 28 06:29:30 2018
> @@ -19,6 +19,12 @@
>  #include "test_macros.h"
>  #include "count_new.hpp"
>
> +#if TEST_STD_VER >= 11
> +#define DELETE_FUNCTION = delete
> +#else
> +#define DELETE_FUNCTION
> +#endif
> +
>  struct A
>  {
>      static int count;
> @@ -31,6 +37,9 @@ struct A
>
>      int get_int() const {return int_;}
>      char get_char() const {return char_;}
> +
> +    A* operator& () DELETE_FUNCTION;
> +
>  private:
>      int int_;
>      char char_;
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


More information about the cfe-commits mailing list