Dirk Mueller
d059de2dbc
- double-free.patch: Fix Node_elem_new op, replacing upref.patch - pma.patch: Replace with upstream solution - nan-sign.patch: Fix negative NaN issue on RiscV, replacing nan-tests.patch OBS-URL: https://build.opensuse.org/request/show/1004924 OBS-URL: https://build.opensuse.org/package/show/Base:System/gawk?expand=0&rev=91
51 lines
1.2 KiB
Diff
51 lines
1.2 KiB
Diff
diff --git a/eval.c b/eval.c
|
|
index 1069570b7..44f614d22 100644
|
|
--- a/eval.c
|
|
+++ b/eval.c
|
|
@@ -39,6 +39,8 @@ static int num_exec_hook = 0;
|
|
static Func_pre_exec pre_execute[MAX_EXEC_HOOKS];
|
|
static Func_post_exec post_execute = NULL;
|
|
|
|
+static double fix_nan_sign(double left, double right, double result);
|
|
+
|
|
extern void frame_popped();
|
|
|
|
int OFSlen;
|
|
@@ -1901,3 +1903,16 @@ elem_new_to_scalar(NODE *n)
|
|
|
|
return n;
|
|
}
|
|
+
|
|
+/* fix_nan_sign --- fix NaN sign on RiscV */
|
|
+
|
|
+static double
|
|
+fix_nan_sign(double left, double right, double result)
|
|
+{
|
|
+ if (isnan(left) && signbit(left))
|
|
+ return copysign(result, -1.0);
|
|
+ else if (isnan(right) && signbit(right))
|
|
+ return copysign(result, -1.0);
|
|
+ else
|
|
+ return result;
|
|
+}
|
|
diff --git a/interpret.h b/interpret.h
|
|
index 26010ada1..955d918f1 100644
|
|
--- a/interpret.h
|
|
+++ b/interpret.h
|
|
@@ -583,6 +583,7 @@ uninitialized_scalar:
|
|
plus:
|
|
t1 = TOP_NUMBER();
|
|
r = make_number(t1->numbr + x2);
|
|
+ r->numbr = fix_nan_sign(t1->numbr, x2, r->numbr);
|
|
DEREF(t1);
|
|
REPLACE(r);
|
|
break;
|
|
@@ -597,6 +598,7 @@ plus:
|
|
minus:
|
|
t1 = TOP_NUMBER();
|
|
r = make_number(t1->numbr - x2);
|
|
+ r->numbr = fix_nan_sign(t1->numbr, x2, r->numbr);
|
|
DEREF(t1);
|
|
REPLACE(r);
|
|
break;
|