Skip to content

Commit 563aef6

Browse files
committed
Review comments
1 parent 22c9a78 commit 563aef6

File tree

1 file changed

+11
-11
lines changed

1 file changed

+11
-11
lines changed

libcxx/include/__memory/array_cookie.h

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -91,11 +91,9 @@ _LIBCPP_HIDE_FROM_ABI _LIBCPP_NO_SANITIZE("address") size_t __get_array_cookie([
9191

9292
#if defined(_LIBCPP_ABI_ITANIUM)
9393

94-
using _ArrayCookie = size_t;
95-
char const* __allocation_start = reinterpret_cast<char const*>(__ptr) - sizeof(_ArrayCookie);
96-
char __cookie[sizeof(_ArrayCookie)];
97-
__builtin_memcpy(&__cookie, __allocation_start, sizeof(_ArrayCookie)); // necessary to avoid violating strict aliasing
98-
return *reinterpret_cast<_ArrayCookie const*>(&__cookie);
94+
struct _ArrayCookie {
95+
size_t __element_count;
96+
};
9997

10098
#elif defined(_LIBCPP_ABI_ITANIUM_WITH_ARM_DIFFERENCES)
10199

@@ -104,16 +102,18 @@ _LIBCPP_HIDE_FROM_ABI _LIBCPP_NO_SANITIZE("address") size_t __get_array_cookie([
104102
size_t __element_count;
105103
};
106104

107-
char const* __allocation_start = reinterpret_cast<char const*>(__ptr) - sizeof(_ArrayCookie);
108-
char __cookie[sizeof(_ArrayCookie)];
109-
__builtin_memcpy(&__cookie, __allocation_start, sizeof(_ArrayCookie)); // necessary to avoid violating strict aliasing
110-
return reinterpret_cast<_ArrayCookie const*>(&__cookie)->__element_count;
111-
112105
#else
113106

114-
static_assert(sizeof(_Tp) == 0, "This function is not implemented for this ABI");
107+
static_assert(false, "Getting the array cookie is not implemented on this ABI");
115108

116109
#endif
110+
111+
char const* __allocation_start = reinterpret_cast<char const*>(__ptr) - sizeof(_ArrayCookie);
112+
_ArrayCookie __cookie;
113+
// This is necessary to avoid violating strict aliasing. It's valid because _ArrayCookie is an
114+
// implicit lifetime type.
115+
__builtin_memcpy(&__cookie, __allocation_start, sizeof(_ArrayCookie));
116+
return __cookie.__element_count;
117117
}
118118

119119
_LIBCPP_END_NAMESPACE_STD

0 commit comments

Comments
 (0)