From a3078fb8c89b61c35ccebb04cf6b189bc81093b3 Mon Sep 17 00:00:00 2001 From: Joshua Root Date: Tue, 22 Oct 2019 06:18:00 +1100 Subject: [PATCH] ICU-20875 Include for max_align_t The definition of max_align_t is not guaranteed to be available unless the appropriate header is included. Since use of from C++ is deprecated, that's , and max_align_t is thus defined under the std namespace rather than in the global namespace. --- icu4c/source/common/uarrsort.cpp | 8 +++++--- icu4c/source/common/utext.cpp | 8 +++++--- icu4c/source/tools/toolutil/toolutil.cpp | 4 +++- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/icu4c/source/common/uarrsort.cpp b/icu4c/source/common/uarrsort.cpp index 60905821649..c17dbb2e2b1 100644 --- a/icu4c/source/common/uarrsort.cpp +++ b/icu4c/source/common/uarrsort.cpp @@ -18,6 +18,8 @@ * Internal function for sorting arrays. */ +#include + #include "unicode/utypes.h" #include "cmemory.h" #include "uarrsort.h" @@ -35,7 +37,7 @@ enum { }; static constexpr int32_t sizeInMaxAlignTs(int32_t sizeInBytes) { - return (sizeInBytes + sizeof(max_align_t) - 1) / sizeof(max_align_t); + return (sizeInBytes + sizeof(std::max_align_t) - 1) / sizeof(std::max_align_t); } /* UComparator convenience implementations ---------------------------------- */ @@ -139,7 +141,7 @@ static void insertionSort(char *array, int32_t length, int32_t itemSize, UComparator *cmp, const void *context, UErrorCode *pErrorCode) { - icu::MaybeStackArray v; + icu::MaybeStackArray v; if (sizeInMaxAlignTs(itemSize) > v.getCapacity() && v.resize(sizeInMaxAlignTs(itemSize)) == nullptr) { *pErrorCode = U_MEMORY_ALLOCATION_ERROR; @@ -233,7 +235,7 @@ static void quickSort(char *array, int32_t length, int32_t itemSize, UComparator *cmp, const void *context, UErrorCode *pErrorCode) { /* allocate two intermediate item variables (x and w) */ - icu::MaybeStackArray xw; + icu::MaybeStackArray xw; if(sizeInMaxAlignTs(itemSize)*2 > xw.getCapacity() && xw.resize(sizeInMaxAlignTs(itemSize) * 2) == nullptr) { *pErrorCode=U_MEMORY_ALLOCATION_ERROR; diff --git a/icu4c/source/common/utext.cpp b/icu4c/source/common/utext.cpp index 9a77228cfc6..763b6684fba 100644 --- a/icu4c/source/common/utext.cpp +++ b/icu4c/source/common/utext.cpp @@ -16,6 +16,8 @@ * created by: Markus W. Scherer */ +#include + #include "unicode/utypes.h" #include "unicode/ustring.h" #include "unicode/unistr.h" @@ -566,8 +568,8 @@ enum { // when a provider asks for a UText to be allocated with extra storage. struct ExtendedUText { - UText ut; - max_align_t extension; + UText ut; + std::max_align_t extension; }; static const UText emptyText = UTEXT_INITIALIZER; @@ -582,7 +584,7 @@ utext_setup(UText *ut, int32_t extraSpace, UErrorCode *status) { // We need to heap-allocate storage for the new UText int32_t spaceRequired = sizeof(UText); if (extraSpace > 0) { - spaceRequired = sizeof(ExtendedUText) + extraSpace - sizeof(max_align_t); + spaceRequired = sizeof(ExtendedUText) + extraSpace - sizeof(std::max_align_t); } ut = (UText *)uprv_malloc(spaceRequired); if (ut == NULL) { diff --git a/icu4c/source/tools/toolutil/toolutil.cpp b/icu4c/source/tools/toolutil/toolutil.cpp index a035f2326a6..95543c630f8 100644 --- a/icu4c/source/tools/toolutil/toolutil.cpp +++ b/icu4c/source/tools/toolutil/toolutil.cpp @@ -60,6 +60,8 @@ #include +#include + #include "unicode/errorcode.h" #include "unicode/putil.h" #include "cmemory.h" @@ -243,7 +245,7 @@ struct UToolMemory { char name[64]; int32_t capacity, maxCapacity, size, idx; void *array; - alignas(max_align_t) char staticArray[1]; + alignas(std::max_align_t) char staticArray[1]; }; U_CAPI UToolMemory * U_EXPORT2