summaryrefslogtreecommitdiff
path: root/external/icu
diff options
context:
space:
mode:
authorDavid Tardon <dtardon@redhat.com>2017-11-12 18:46:48 +0100
committerEike Rathke <erack@redhat.com>2017-11-17 00:17:04 +0100
commitf643e1f687e27e7f46c53d7298772d4dddb3e660 (patch)
tree77cebb05db0f987d63b2363e95b5afefc9dec88e /external/icu
parent26ea47b7217053efb5eaa20f76b8895d29ae1f18 (diff)
Upgrade to ICU 60.1
Change-Id: I07837be7faac0b2238b0cba8fb981e4c4d24c498
Diffstat (limited to 'external/icu')
-rw-r--r--external/icu/UnpackedTarball_icu.mk3
-rw-r--r--external/icu/icu4c-59-icu13329-xlocale.patch.114
-rw-r--r--external/icu/icu4c-59-werror-shadow.patch.142
-rw-r--r--external/icu/icu4c-59-werror-undef.patch.113
-rw-r--r--external/icu/icu4c-changeset-39671.patch.1155
-rw-r--r--external/icu/icu4c-changeset-40324.patch.111
-rw-r--r--external/icu/icu4c-khmerbreakengine.patch.112
-rw-r--r--external/icu/icu4c-ubsan.patch.180
8 files changed, 6 insertions, 324 deletions
diff --git a/external/icu/UnpackedTarball_icu.mk b/external/icu/UnpackedTarball_icu.mk
index 7bf2926e5a83..499650976a55 100644
--- a/external/icu/UnpackedTarball_icu.mk
+++ b/external/icu/UnpackedTarball_icu.mk
@@ -34,10 +34,7 @@ $(eval $(call gb_UnpackedTarball_add_patches,icu,\
external/icu/icu4c-clang-cl.patch.1 \
$(if $(filter-out ANDROID,$(OS)),external/icu/icu4c-icudata-stdlibs.patch.1) \
external/icu/icu4c-khmerbreakengine.patch.1 \
- external/icu/icu4c-59-werror-undef.patch.1 \
external/icu/icu4c-59-werror-shadow.patch.1 \
- external/icu/icu4c-59-icu13329-xlocale.patch.1 \
- external/icu/icu4c-changeset-40324.patch.1 \
))
$(eval $(call gb_UnpackedTarball_add_file,icu,source/data/brkitr/khmerdict.dict,external/icu/khmerdict.dict))
diff --git a/external/icu/icu4c-59-icu13329-xlocale.patch.1 b/external/icu/icu4c-59-icu13329-xlocale.patch.1
deleted file mode 100644
index 93e14d23fa5a..000000000000
--- a/external/icu/icu4c-59-icu13329-xlocale.patch.1
+++ /dev/null
@@ -1,14 +0,0 @@
-# xlocale.h is gone with glibc 2.26 and should never had been included.
-# https://ssl.icu-project.org/trac/ticket/13329
-diff -ur icu.org/source/i18n/digitlst.cpp icu/source/i18n/digitlst.cpp
---- icu.org/source/i18n/digitlst.cpp 2017-01-20 01:20:31.000000000 +0100
-+++ icu/source/i18n/digitlst.cpp 2017-09-13 13:25:59.980160603 +0200
-@@ -63,6 +63,8 @@
- #if U_USE_STRTOD_L
- # if U_PLATFORM_USES_ONLY_WIN32_API || U_PLATFORM == U_PF_CYGWIN
- # include <locale.h>
-+# elif U_PLATFORM_IS_LINUX_BASED
-+# include <ctype.h> // should be for all POSIX.2008 compliant platforms, but..
- # else
- # include <xlocale.h>
- # endif
diff --git a/external/icu/icu4c-59-werror-shadow.patch.1 b/external/icu/icu4c-59-werror-shadow.patch.1
index 2031f80cb908..fb88244aff13 100644
--- a/external/icu/icu4c-59-werror-shadow.patch.1
+++ b/external/icu/icu4c-59-werror-shadow.patch.1
@@ -1,45 +1,3 @@
-diff -ur icu.org/source/common/unicode/char16ptr.h icu/source/common/unicode/char16ptr.h
-# https://ssl.icu-project.org/trac/ticket/13176
---- icu.org/source/common/unicode/char16ptr.h 2017-03-29 06:44:37.000000000 +0200
-+++ icu/source/common/unicode/char16ptr.h 2017-04-24 11:56:47.707572355 +0200
-@@ -107,14 +107,14 @@
-
- #ifdef U_ALIASING_BARRIER
-
--Char16Ptr::Char16Ptr(char16_t *p) : p(p) {}
-+Char16Ptr::Char16Ptr(char16_t *p_) : p(p_) {}
- #if !U_CHAR16_IS_TYPEDEF
--Char16Ptr::Char16Ptr(uint16_t *p) : p(cast(p)) {}
-+Char16Ptr::Char16Ptr(uint16_t *p_) : p(cast(p_)) {}
- #endif
- #if U_SIZEOF_WCHAR_T==2
--Char16Ptr::Char16Ptr(wchar_t *p) : p(cast(p)) {}
-+Char16Ptr::Char16Ptr(wchar_t *p_) : p(cast(p_)) {}
- #endif
--Char16Ptr::Char16Ptr(std::nullptr_t p) : p(p) {}
-+Char16Ptr::Char16Ptr(std::nullptr_t p_) : p(p_) {}
- Char16Ptr::~Char16Ptr() {
- U_ALIASING_BARRIER(p);
- }
-@@ -215,14 +215,14 @@
-
- #ifdef U_ALIASING_BARRIER
-
--ConstChar16Ptr::ConstChar16Ptr(const char16_t *p) : p(p) {}
-+ConstChar16Ptr::ConstChar16Ptr(const char16_t *p_) : p(p_) {}
- #if !U_CHAR16_IS_TYPEDEF
--ConstChar16Ptr::ConstChar16Ptr(const uint16_t *p) : p(cast(p)) {}
-+ConstChar16Ptr::ConstChar16Ptr(const uint16_t *p_) : p(cast(p_)) {}
- #endif
- #if U_SIZEOF_WCHAR_T==2
--ConstChar16Ptr::ConstChar16Ptr(const wchar_t *p) : p(cast(p)) {}
-+ConstChar16Ptr::ConstChar16Ptr(const wchar_t *p_) : p(cast(p_)) {}
- #endif
--ConstChar16Ptr::ConstChar16Ptr(const std::nullptr_t p) : p(p) {}
-+ConstChar16Ptr::ConstChar16Ptr(const std::nullptr_t p_) : p(p_) {}
- ConstChar16Ptr::~ConstChar16Ptr() {
- U_ALIASING_BARRIER(p);
- }
diff -ur icu.org/source/common/unicode/unistr.h icu/source/common/unicode/unistr.h
--- icu.org/source/common/unicode/unistr.h 2017-03-29 06:44:37.000000000 +0200
+++ icu/source/common/unicode/unistr.h 2017-04-24 11:59:51.782076511 +0200
diff --git a/external/icu/icu4c-59-werror-undef.patch.1 b/external/icu/icu4c-59-werror-undef.patch.1
deleted file mode 100644
index 0792e7357257..000000000000
--- a/external/icu/icu4c-59-werror-undef.patch.1
+++ /dev/null
@@ -1,13 +0,0 @@
-diff -ur icu.org/source/common/unicode/uvernum.h icu/source/common/unicode/uvernum.h
-# https://ssl.icu-project.org/trac/ticket/13175
---- icu.org/source/common/unicode/uvernum.h 2017-03-21 02:03:49.000000000 +0100
-+++ icu/source/common/unicode/uvernum.h 2017-04-21 23:44:55.123597927 +0200
-@@ -125,7 +125,7 @@
- * This value will change in the subsequent releases of ICU
- * @stable ICU 2.6
- */
--#if U_PLATFORM_HAS_WINUWP_API == 0
-+#if !defined(U_PLATFORM_HAS_WINUWP_API) || (U_PLATFORM_HAS_WINUWP_API == 0)
- #define U_ICU_VERSION_SHORT "59"
- #else
- // U_DISABLE_RENAMING does not impact dat file name
diff --git a/external/icu/icu4c-changeset-39671.patch.1 b/external/icu/icu4c-changeset-39671.patch.1
deleted file mode 100644
index fa8d3679ebff..000000000000
--- a/external/icu/icu4c-changeset-39671.patch.1
+++ /dev/null
@@ -1,155 +0,0 @@
-Index: /trunk/icu4c/source/common/utext.cpp
-===================================================================
---- icu.orig/source/common/utext.cpp
-+++ icu/source/common/utext.cpp
-@@ -848,7 +848,13 @@
-
- // Chunk size.
--// Must be less than 85, because of byte mapping from UChar indexes to native indexes.
--// Worst case is three native bytes to one UChar. (Supplemenaries are 4 native bytes
--// to two UChars.)
-+// Must be less than 42 (256/6), because of byte mapping from UChar indexes to native indexes.
-+// Worst case there are six UTF-8 bytes per UChar.
-+// obsolete 6 byte form fd + 5 trails maps to fffd
-+// obsolete 5 byte form fc + 4 trails maps to fffd
-+// non-shortest 4 byte forms maps to fffd
-+// normal supplementaries map to a pair of utf-16, two utf8 bytes per utf-16 unit
-+// mapToUChars array size must allow for the worst case, 6.
-+// This could be brought down to 4, by treating fd and fc as pure illegal,
-+// rather than obsolete lead bytes. But that is not compatible with the utf-8 access macros.
- //
- enum { UTF8_TEXT_CHUNK_SIZE=32 };
-@@ -890,5 +896,5 @@
- // one for a supplementary starting in the last normal position,
- // and one for an entry for the buffer limit position.
-- uint8_t mapToUChars[UTF8_TEXT_CHUNK_SIZE*3+6]; // Map native offset from bufNativeStart to
-+ uint8_t mapToUChars[UTF8_TEXT_CHUNK_SIZE*6+6]; // Map native offset from bufNativeStart to
- // correspoding offset in filled part of buf.
- int32_t align;
-@@ -1033,4 +1039,5 @@
- u8b = (UTF8Buf *)ut->p; // the current buffer
- mapIndex = ix - u8b->toUCharsMapStart;
-+ U_ASSERT(mapIndex < (int32_t)sizeof(UTF8Buf::mapToUChars));
- ut->chunkOffset = u8b->mapToUChars[mapIndex] - u8b->bufStartIdx;
- return TRUE;
-@@ -1299,4 +1306,8 @@
- // If index is at the end, there is no character there to look at.
- if (ix != ut->b) {
-+ // Note: this function will only move the index back if it is on a trail byte
-+ // and there is a preceding lead byte and the sequence from the lead
-+ // through this trail could be part of a valid UTF-8 sequence
-+ // Otherwise the index remains unchanged.
- U8_SET_CP_START(s8, 0, ix);
- }
-@@ -1312,5 +1323,8 @@
- uint8_t *mapToNative = u8b->mapToNative;
- uint8_t *mapToUChars = u8b->mapToUChars;
-- int32_t toUCharsMapStart = ix - (UTF8_TEXT_CHUNK_SIZE*3 + 1);
-+ int32_t toUCharsMapStart = ix - sizeof(UTF8Buf::mapToUChars) + 1;
-+ // Note that toUCharsMapStart can be negative. Happens when the remaining
-+ // text from current position to the beginning is less than the buffer size.
-+ // + 1 because mapToUChars must have a slot at the end for the bufNativeLimit entry.
- int32_t destIx = UTF8_TEXT_CHUNK_SIZE+2; // Start in the overflow region
- // at end of buffer to leave room
-@@ -1339,4 +1353,5 @@
- // Special case ASCII range for speed.
- buf[destIx] = (UChar)c;
-+ U_ASSERT(toUCharsMapStart <= srcIx);
- mapToUChars[srcIx - toUCharsMapStart] = (uint8_t)destIx;
- mapToNative[destIx] = (uint8_t)(srcIx - toUCharsMapStart);
-@@ -1368,4 +1383,5 @@
- mapToUChars[sIx-- - toUCharsMapStart] = (uint8_t)destIx;
- } while (sIx >= srcIx);
-+ U_ASSERT(toUCharsMapStart <= (srcIx+1));
-
- // Set native indexing limit to be the current position.
-@@ -1542,4 +1558,5 @@
- U_ASSERT(index<=ut->chunkNativeLimit);
- int32_t mapIndex = index - u8b->toUCharsMapStart;
-+ U_ASSERT(mapIndex < (int32_t)sizeof(UTF8Buf::mapToUChars));
- int32_t offset = u8b->mapToUChars[mapIndex] - u8b->bufStartIdx;
- U_ASSERT(offset>=0 && offset<=ut->chunkLength);
-Index: /trunk/icu4c/source/test/intltest/utxttest.cpp
-===================================================================
---- icu.orig/source/test/intltest/utxttest.cpp
-+++ icu/source/test/intltest/utxttest.cpp
-@@ -68,4 +68,6 @@
- case 7: name = "Ticket12130";
- if (exec) Ticket12130(); break;
-+ case 8: name = "Ticket12888";
-+ if (exec) Ticket12888(); break;
- default: name = ""; break;
- }
-@@ -1584,2 +1586,62 @@
- utext_close(&ut);
- }
-+
-+// Ticket 12888: bad handling of illegal utf-8 containing many instances of the archaic, now illegal,
-+// six byte utf-8 forms. Original implementation had an assumption that
-+// there would be at most three utf-8 bytes per UTF-16 code unit.
-+// The five and six byte sequences map to a single replacement character.
-+
-+void UTextTest::Ticket12888() {
-+ const char *badString =
-+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
-+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
-+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
-+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
-+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
-+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
-+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
-+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
-+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
-+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
-+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
-+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
-+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
-+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
-+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
-+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
-+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
-+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
-+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
-+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80";
-+
-+ UErrorCode status = U_ZERO_ERROR;
-+ LocalUTextPointer ut(utext_openUTF8(NULL, badString, -1, &status));
-+ TEST_SUCCESS(status);
-+ for (;;) {
-+ UChar32 c = utext_next32(ut.getAlias());
-+ if (c == U_SENTINEL) {
-+ break;
-+ }
-+ }
-+ int32_t endIdx = utext_getNativeIndex(ut.getAlias());
-+ if (endIdx != (int32_t)strlen(badString)) {
-+ errln("%s:%d expected=%d, actual=%d", __FILE__, __LINE__, strlen(badString), endIdx);
-+ return;
-+ }
-+
-+ for (int32_t prevIndex = endIdx; prevIndex>0;) {
-+ UChar32 c = utext_previous32(ut.getAlias());
-+ int32_t currentIndex = utext_getNativeIndex(ut.getAlias());
-+ if (c != 0xfffd) {
-+ errln("%s:%d (expected, actual, index) = (%d, %d, %d)\n",
-+ __FILE__, __LINE__, 0xfffd, c, currentIndex);
-+ break;
-+ }
-+ if (currentIndex != prevIndex - 6) {
-+ errln("%s:%d: wrong index. Expected, actual = %d, %d",
-+ __FILE__, __LINE__, prevIndex - 6, currentIndex);
-+ break;
-+ }
-+ prevIndex = currentIndex;
-+ }
-+}
-Index: /trunk/icu4c/source/test/intltest/utxttest.h
-===================================================================
---- icu.orig/source/test/intltest/utxttest.h
-+++ icu/source/test/intltest/utxttest.h
-@@ -39,4 +39,5 @@
- void Ticket10983();
- void Ticket12130();
-+ void Ticket12888();
-
- private:
diff --git a/external/icu/icu4c-changeset-40324.patch.1 b/external/icu/icu4c-changeset-40324.patch.1
deleted file mode 100644
index a651eb19415d..000000000000
--- a/external/icu/icu4c-changeset-40324.patch.1
+++ /dev/null
@@ -1,11 +0,0 @@
-# https://ssl.icu-project.org/trac/changeset/40324/trunk/icu4c/source/i18n/zonemeta.cpp
-Index: trunk/icu4c/source/i18n/zonemeta.cpp
-===================================================================
---- icu.orig/source/i18n/zonemeta.cpp
-+++ icu/source/i18n/zonemeta.cpp
-@@ -691,5 +691,4 @@
- if (U_FAILURE(status)) {
- delete mzMappings;
-- deleteOlsonToMetaMappingEntry(entry);
- uprv_free(entry);
- break;
diff --git a/external/icu/icu4c-khmerbreakengine.patch.1 b/external/icu/icu4c-khmerbreakengine.patch.1
index 74f60f866257..6b45b3743611 100644
--- a/external/icu/icu4c-khmerbreakengine.patch.1
+++ b/external/icu/icu4c-khmerbreakengine.patch.1
@@ -310,7 +310,7 @@ diff -ur icu.org/source/common/dictbe.cpp icu/source/common/dictbe.cpp
@@ -886,180 +1035,204 @@
int32_t rangeStart,
int32_t rangeEnd,
- UStack &foundBreaks ) const {
+ UVector32 &foundBreaks ) const {
- if ((rangeEnd - rangeStart) < KHMER_MIN_WORD_SPAN) {
- return 0; // Not enough characters for two words
- }
@@ -760,7 +760,7 @@ diff -ur icu.org/source/common/dictbe.h icu/source/common/dictbe.h
* @param text A UText representing the text. The iterator is left at
- * the end of the run of characters which the engine is capable of handling
+ * the end of the run of characters which the engine is capable of handling
- * that starts from the first (or last) character in the range.
+ * that starts from the first character in the range.
* @param startPos The start of the run within the supplied text.
* @param endPos The end of the run within the supplied text.
@@ -245,118 +306,120 @@
@@ -819,7 +819,7 @@ diff -ur icu.org/source/common/dictbe.h icu/source/common/dictbe.h
- virtual int32_t divideUpDictionaryRange( UText *text,
- int32_t rangeStart,
- int32_t rangeEnd,
-- UStack &foundBreaks ) const;
+- UVector32 &foundBreaks ) const;
-
-};
-
@@ -875,7 +875,7 @@ diff -ur icu.org/source/common/dictbe.h icu/source/common/dictbe.h
- virtual int32_t divideUpDictionaryRange( UText *text,
- int32_t rangeStart,
- int32_t rangeEnd,
-- UStack &foundBreaks ) const;
+- UVector32 &foundBreaks ) const;
-
-};
-
@@ -931,7 +931,7 @@ diff -ur icu.org/source/common/dictbe.h icu/source/common/dictbe.h
+ virtual int32_t divideUpDictionaryRange( UText *text,
+ int32_t rangeStart,
+ int32_t rangeEnd,
-+ UStack &foundBreaks ) const;
++ UVector32 &foundBreaks ) const;
+
+};
+
@@ -989,7 +989,7 @@ diff -ur icu.org/source/common/dictbe.h icu/source/common/dictbe.h
+ virtual int32_t divideUpDictionaryRange( UText *text,
+ int32_t rangeStart,
+ int32_t rangeEnd,
-+ UStack &foundBreaks ) const;
++ UVector32 &foundBreaks ) const;
+
+};
+
diff --git a/external/icu/icu4c-ubsan.patch.1 b/external/icu/icu4c-ubsan.patch.1
index 56594005e9d0..9f6aa3fbc9f8 100644
--- a/external/icu/icu4c-ubsan.patch.1
+++ b/external/icu/icu4c-ubsan.patch.1
@@ -65,18 +65,6 @@ diff -ur icu.org/source/common/ubidiimp.h icu/source/common/ubidiimp.h
#define REMOVE_ODD_BIT(x) ((x)&=~INDEX_ODD_BIT)
#define GET_INDEX(x) ((x)&~INDEX_ODD_BIT)
-diff -ur icu.org/source/common/ucharstriebuilder.cpp icu/source/common/ucharstriebuilder.cpp
---- icu.org/source/common/ucharstriebuilder.cpp 2017-02-03 19:57:23.000000000 +0100
-+++ icu/source/common/ucharstriebuilder.cpp 2017-04-21 22:46:25.375651159 +0200
-@@ -287,7 +287,7 @@
-
- UCharsTrieBuilder::UCTLinearMatchNode::UCTLinearMatchNode(const UChar *units, int32_t len, Node *nextNode)
- : LinearMatchNode(len, nextNode), s(units) {
-- hash=hash*37+ustr_hashUCharsN(units, len);
-+ hash=hash*37U+ustr_hashUCharsN(units, len);
- }
-
- UBool
diff -ur icu.org/source/common/ucmndata.cpp icu/source/common/ucmndata.cpp
--- icu.org/source/common/ucmndata.cpp 2017-03-08 16:34:47.000000000 +0100
+++ icu/source/common/ucmndata.cpp 2017-04-21 22:46:25.376651159 +0200
@@ -101,71 +89,3 @@ diff -ur icu.org/source/common/ucmndata.h icu/source/common/ucmndata.h
} UDataOffsetTOC;
/**
-diff -ur icu.org/source/common/unicode/stringtriebuilder.h icu/source/common/unicode/stringtriebuilder.h
---- icu.org/source/common/unicode/stringtriebuilder.h 2017-03-10 23:01:34.000000000 +0100
-+++ icu/source/common/unicode/stringtriebuilder.h 2017-04-21 22:47:43.395634383 +0200
-@@ -276,7 +276,7 @@
- void setValue(int32_t v) {
- hasValue=TRUE;
- value=v;
-- hash=hash*37+v;
-+ hash=hash*37U+v;
- }
- protected:
- UBool hasValue;
-@@ -307,7 +307,7 @@
- class LinearMatchNode : public ValueNode {
- public:
- LinearMatchNode(int32_t len, Node *nextNode)
-- : ValueNode((0x333333*37+len)*37+hashCode(nextNode)),
-+ : ValueNode((0x333333U*37+len)*37+hashCode(nextNode)),
- length(len), next(nextNode) {}
- virtual UBool operator==(const Node &other) const;
- virtual int32_t markRightEdgesFirst(int32_t edgeNumber);
-@@ -342,7 +342,7 @@
- equal[length]=NULL;
- values[length]=value;
- ++length;
-- hash=(hash*37+c)*37+value;
-+ hash=(hash*37U+c)*37+value;
- }
- // Adds a unit which leads to another match node.
- void add(int32_t c, Node *node) {
-@@ -350,7 +350,7 @@
- equal[length]=node;
- values[length]=0;
- ++length;
-- hash=(hash*37+c)*37+hashCode(node);
-+ hash=(hash*37U+c)*37+hashCode(node);
- }
- protected:
- Node *equal[kMaxBranchLinearSubNodeLength]; // NULL means "has final value".
-@@ -365,7 +365,7 @@
- class SplitBranchNode : public BranchNode {
- public:
- SplitBranchNode(char16_t middleUnit, Node *lessThanNode, Node *greaterOrEqualNode)
-- : BranchNode(((0x555555*37+middleUnit)*37+
-+ : BranchNode(((0x555555U*37+middleUnit)*37+
- hashCode(lessThanNode))*37+hashCode(greaterOrEqualNode)),
- unit(middleUnit), lessThan(lessThanNode), greaterOrEqual(greaterOrEqualNode) {}
- virtual UBool operator==(const Node &other) const;
-@@ -382,7 +382,7 @@
- class BranchHeadNode : public ValueNode {
- public:
- BranchHeadNode(int32_t len, Node *subNode)
-- : ValueNode((0x666666*37+len)*37+hashCode(subNode)),
-+ : ValueNode((0x666666U*37+len)*37+hashCode(subNode)),
- length(len), next(subNode) {}
- virtual UBool operator==(const Node &other) const;
- virtual int32_t markRightEdgesFirst(int32_t edgeNumber);
-diff -ur icu.org/source/i18n/collationdatareader.cpp icu/source/i18n/collationdatareader.cpp
---- icu.org/source/i18n/collationdatareader.cpp 2017-01-20 01:20:31.000000000 +0100
-+++ icu/source/i18n/collationdatareader.cpp 2017-04-21 22:46:25.380651158 +0200
-@@ -419,6 +419,7 @@
- tailoring.data, ts, fastLatinPrimaries, UPRV_LENGTHOF(fastLatinPrimaries));
- if(options == ts.options && ts.variableTop != 0 &&
- reorderCodesLength == ts.reorderCodesLength &&
-+ reorderCodesLength != 0 &&
- uprv_memcmp(reorderCodes, ts.reorderCodes, reorderCodesLength * 4) == 0 &&
- fastLatinOptions == ts.fastLatinOptions &&
- (fastLatinOptions < 0 ||