apl: patch build on platforms with not enough ldbl range
This backports a relevant fix from upstream.
This commit is contained in:
parent
d2875a9d64
commit
5fb8ae9f8d
1 changed files with 43 additions and 0 deletions
43
srcpkgs/apl/patches/ppc.patch
Normal file
43
srcpkgs/apl/patches/ppc.patch
Normal file
|
@ -0,0 +1,43 @@
|
|||
This backports the relevant bit of svn revision 1177 to fix build on platforms
|
||||
where long double does not have extended range (larger than regular double),
|
||||
particularly PowerPC (32 and 64 bit).
|
||||
|
||||
On those platforms, the build previously failed with:
|
||||
|
||||
Tokenizer.cc:769:4: error: floating constant exceeds range of 'long double' [-Werror=overflow]
|
||||
exp_0_9(1E30)
|
||||
^~~~~~~
|
||||
|
||||
--- src/Tokenizer.cc
|
||||
+++ src/Tokenizer.cc
|
||||
@@ -755,10 +755,10 @@
|
||||
MAX_TOKENIZE_DIGITS = MAX_TOKENIZE_DIGITS_1 - 1 // excl. rounding digit
|
||||
};
|
||||
|
||||
-#define exp_0_9(x) x ## 0L, x ## 1L, x ## 2L, x ## 3L, x ## 4L, \
|
||||
- x ## 5L, x ## 6L, x ## 7L, x ## 8L, x ## 9L,
|
||||
+#define exp_0_9(x) x ## 0, x ## 1, x ## 2, x ## 3, x ## 4, \
|
||||
+ x ## 5, x ## 6, x ## 7, x ## 8, x ## 9,
|
||||
|
||||
-static const long double expo_tab[310] =
|
||||
+static const long double expo_tab[309] =
|
||||
{
|
||||
exp_0_9(1E) exp_0_9(1E1) exp_0_9(1E2) exp_0_9(1E3) exp_0_9(1E4)
|
||||
exp_0_9(1E5) exp_0_9(1E6) exp_0_9(1E7) exp_0_9(1E8) exp_0_9(1E9)
|
||||
@@ -766,7 +766,7 @@
|
||||
exp_0_9(1E15) exp_0_9(1E16) exp_0_9(1E17) exp_0_9(1E18) exp_0_9(1E19)
|
||||
exp_0_9(1E20) exp_0_9(1E21) exp_0_9(1E22) exp_0_9(1E23) exp_0_9(1E24)
|
||||
exp_0_9(1E25) exp_0_9(1E26) exp_0_9(1E27) exp_0_9(1E28) exp_0_9(1E29)
|
||||
- exp_0_9(1E30)
|
||||
+ 1E300, 1E301, 1E302, 1E303, 1E304, 1E305, 1E306, 1E307, 1E308
|
||||
};
|
||||
|
||||
static const long double nexpo_tab[310] =
|
||||
@@ -960,6 +960,7 @@
|
||||
|
||||
if (expo > 0)
|
||||
{
|
||||
+ if (expo > 308) return false;
|
||||
if (negative) flt_val = - v * expo_tab[expo];
|
||||
else flt_val = v * expo_tab[expo];
|
||||
return true; // OK
|
Loading…
Reference in a new issue