[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