summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--system/icu/APKBUILD4
-rw-r--r--system/icu/icu-63.1-test-failure.patch69
2 files changed, 72 insertions, 1 deletions
diff --git a/system/icu/APKBUILD b/system/icu/APKBUILD
index 55531e9b8..35ca27573 100644
--- a/system/icu/APKBUILD
+++ b/system/icu/APKBUILD
@@ -18,6 +18,7 @@ makedepends=""
source="https://download.icu-project.org/files/icu4c/${pkgver}/${pkgname}4c-$_ver-src.tgz
icu-60.2-always-use-utf8.patch
checkimpl.patch
+ icu-63.1-test-failure.patch
"
# secfixes:
@@ -87,4 +88,5 @@ static() {
sha512sums="9ab407ed840a00cdda7470dcc4c40299a125ad246ae4d019c4b1ede54781157fd63af015a8228cd95dbc47e4d15a0932b2c657489046a19788e5e8266eac079c icu4c-63_1-src.tgz
f86c62422f38f6485c58d4766e629bab69e4b0e00fa910854e40e7db1ace299152eaefa99ae2fbab7465e65d3156cbea7124612defa60680db58ab5c34d6262f icu-60.2-always-use-utf8.patch
-af27a474af041a6ac522901a635c3f328dee5f2b8e42d1229970908c740cd2b97fc06e5432541773d7c80339382f75d795911540f844b6d89ec0ee99d4fa6ff9 checkimpl.patch"
+af27a474af041a6ac522901a635c3f328dee5f2b8e42d1229970908c740cd2b97fc06e5432541773d7c80339382f75d795911540f844b6d89ec0ee99d4fa6ff9 checkimpl.patch
+24a64f05e10b59d2f7fdd063e032195d446c668497934a0f5012a7b6088b61d260f7ddb8ecbe60bdc49e16ab810fda169bc1d330f30acdf45a1ad8f844fc464d icu-63.1-test-failure.patch"
diff --git a/system/icu/icu-63.1-test-failure.patch b/system/icu/icu-63.1-test-failure.patch
new file mode 100644
index 000000000..f6be126ec
--- /dev/null
+++ b/system/icu/icu-63.1-test-failure.patch
@@ -0,0 +1,69 @@
+From 0da942bd52ffdd3621689fbc4bf3017e75b001e3 Mon Sep 17 00:00:00 2001
+From: Fredrik Roubert <roubert@google.com>
+Date: Fri, 12 Oct 2018 14:33:03 +0200
+Subject: [PATCH] ICU-20080 Avoid strange compiler behaviour in ASSERT_EQUAL()
+ macro.
+
+Using temporary variables for the two values to be compared here makes
+GCC compile the code just like we expect it to. (What it really is that
+it otherwise does on some architechtures remains a mystery.)
+
+This will make the tests pass as expected also on IA-32 with GCC.
+
+It'll also make it possible to revert the old workaround for SPARC
+introduced by commit 5b0592af79c7601d08cafcbbc7b71077faeb7e4f.
+
+Tested:
+
+Linux gcc45 3.16.0-5-686-pae #1 SMP Debian 3.16.51-3+deb8u1 (2018-01-08) i686 GNU/Linux
+
+Debian clang version 3.5.0-10 (tags/RELEASE_350/final) (based on LLVM 3.5.0)
+g++ (Debian 4.9.2-10+deb8u1) 4.9.2
+
+Linux gcc202 4.16.0-1-sparc64-smp #1 SMP Debian 4.16.5-1 (2018-04-29) sparc64 GNU/Linux
+
+clang version 4.0.1-10+sparc64 (tags/RELEASE_401/final)
+g++ (Debian 8.2.0-7) 8.2.0
+---
+ icu4c/source/test/intltest/dcfmapts.cpp | 21 +++++++++------------
+ 1 file changed, 9 insertions(+), 12 deletions(-)
+
+diff --git a/icu4c/source/test/intltest/dcfmapts.cpp b/icu4c/source/test/intltest/dcfmapts.cpp
+index 6a79bab8509..9fa0e3deee4 100644
+--- source/test/intltest/dcfmapts.cpp
++++ source/test/intltest/dcfmapts.cpp
+@@ -636,8 +636,14 @@ void IntlTestDecimalFormatAPI::TestScale()
+ }
+
+
+-#define ASSERT_EQUAL(expect, actual) { char tmp[200]; sprintf(tmp, "(%g==%g)", (double)(expect), (double)(actual)); \
+- assertTrue(tmp, ((expect)==(actual)), FALSE, TRUE, __FILE__, __LINE__); }
++#define ASSERT_EQUAL(expect, actual) { \
++ /* ICU-20080: Use temporary variables to avoid strange compiler behaviour \
++ (with the nice side-effect of avoiding repeated function calls too). */ \
++ auto lhs = (expect); \
++ auto rhs = (actual); \
++ char tmp[200]; \
++ sprintf(tmp, "(%g==%g)", (double)lhs, (double)rhs); \
++ assertTrue(tmp, (lhs==rhs), FALSE, TRUE, __FILE__, __LINE__); }
+
+ void IntlTestDecimalFormatAPI::TestFixedDecimal() {
+ UErrorCode status = U_ZERO_ERROR;
+@@ -946,16 +952,7 @@ void IntlTestDecimalFormatAPI::TestFixedDecimal() {
+ ASSERT_EQUAL(0, fd.getPluralOperand(PLURAL_OPERAND_T));
+ // note: going through DigitList path to FixedDecimal, which is trimming
+ // int64_t fields to 18 digits. See ticket Ticket #10374
+- // ASSERT_EQUAL(223372036854775807LL, fd.getPluralOperand(PLURAL_OPERAND_I);
+- if (!(
+- fd.getPluralOperand(PLURAL_OPERAND_I) == 223372036854775807LL ||
+- fd.getPluralOperand(PLURAL_OPERAND_I) == 9223372036854775807LL)) {
+- dataerrln(
+- "File %s, Line %d, fd.getPluralOperand(PLURAL_OPERAND_I = %lld",
+- __FILE__,
+- __LINE__,
+- fd.getPluralOperand(PLURAL_OPERAND_I));
+- }
++ ASSERT_EQUAL(223372036854775807LL, fd.getPluralOperand(PLURAL_OPERAND_I));
+ ASSERT_EQUAL(TRUE, fd.hasIntegerValue());
+ ASSERT_EQUAL(FALSE, fd.isNegative());
+