!36 update gawk to 5.2.2

From: @huyubiao 
Reviewed-by: @licunlong 
Signed-off-by: @licunlong
This commit is contained in:
openeuler-ci-bot 2023-10-09 06:54:23 +00:00 committed by Gitee
commit d6e1efe52e
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
10 changed files with 7 additions and 4176 deletions

View File

@ -1,259 +0,0 @@
From 2848045aed5ccfd7b582808288f7fcc18d319952 Mon Sep 17 00:00:00 2001
From: "Arnold D. Robbins" <arnold@skeeve.com>
Date: Wed, 14 Sep 2022 22:33:39 +0300
Subject: Additional fix for Node_elem_new.
Reference:https://git.savannah.gnu.org/cgit/gawk.git/patch/?id=2848045aed5ccfd7b582808288f7fcc18d319952
Conflict:tailoring commit on ChangeLog
---
interpret.h | 14 ++++++++++----
pc/ChangeLog | 4 ++++
pc/Makefile.tst | 18 +++++++++++++++++-
test/ChangeLog | 5 +++--
test/Makefile.am | 7 ++++++-
test/Makefile.in | 17 ++++++++++++++++-
test/Maketests | 10 ++++++++++
test/elemnew2.awk | 6 ++++++
test/elemnew2.ok | 2 ++
test/elemnew3.awk | 8 ++++++++
test/elemnew3.ok | 0
11 files changed, 81 insertions(+), 9 deletions(-)
create mode 100644 test/elemnew2.awk
create mode 100644 test/elemnew2.ok
create mode 100644 test/elemnew3.awk
create mode 100644 test/elemnew3.ok
diff --git a/interpret.h b/interpret.h
index 268655b..26010ad 100644
--- a/interpret.h
+++ b/interpret.h
@@ -213,7 +213,7 @@ top:
case Node_var_new:
uninitialized_scalar:
if (op != Op_push_arg_untyped) {
- /* convert untyped to scalar */
+ /* convert very original untyped to scalar */
m->type = Node_var;
m->var_value = dupnode(Nnull_string);
}
@@ -222,6 +222,7 @@ uninitialized_scalar:
_("reference to uninitialized argument `%s'") :
_("reference to uninitialized variable `%s'"),
save_symbol->vname);
+ // set up local param by value
if (op != Op_push_arg_untyped)
m = dupnode(Nnull_string);
UPREF(m);
@@ -230,15 +231,20 @@ uninitialized_scalar:
case Node_elem_new:
if (op != Op_push_arg_untyped) {
- /* convert untyped to scalar */
- m = elem_new_to_scalar(m);
+ /* convert very original untyped to scalar */
+ m->type = Node_var;
+ m->var_value = dupnode(Nnull_string);
}
if (do_lint)
lintwarn(isparam ?
_("reference to uninitialized argument `%s'") :
_("reference to uninitialized variable `%s'"),
save_symbol->vname);
- UPREF(m);
+ // set up local param by value
+ if (op != Op_push_arg_untyped) {
+ m = elem_new_to_scalar(m);
+ }
+
PUSH(m);
break;
diff --git a/pc/ChangeLog b/pc/ChangeLog
index a78ccfc..67ee4d2 100644
--- a/pc/ChangeLog
+++ b/pc/ChangeLog
@@ -1,3 +1,7 @@
+2022-09-14 Arnold D. Robbins <arnold@skeeve.com>
+
+ * Makefile.tst: Regenerated.
+
2022-09-04 Arnold D. Robbins <arnold@skeeve.com>
* 5.2.0: Release tar ball made.
diff --git a/pc/Makefile.tst b/pc/Makefile.tst
index 269ec8a..9e40cd2 100644
--- a/pc/Makefile.tst
+++ b/pc/Makefile.tst
@@ -190,7 +190,8 @@ GAWK_EXT_TESTS = \
binmode1 charasbytes clos1way clos1way2 clos1way3 clos1way4 \
clos1way5 clos1way6 colonwarn commas crlf dbugeval dbugeval2 \
dbugeval3 dbugtypedre1 dbugtypedre2 delsub devfd devfd1 devfd2 \
- dfacheck1 dumpvars errno exit fieldwdth forcenum fpat1 fpat2 \
+ dfacheck1 dumpvars elemnew1 elemnew2 elemnew3 \
+ errno exit fieldwdth forcenum fpat1 fpat2 \
fpat3 fpat4 fpat5 fpat6 fpat7 fpat8 fpat9 fpatnull fsfwfs functab1 \
functab2 functab3 functab6 funlen fwtest fwtest2 fwtest3 fwtest4 \
fwtest5 fwtest6 fwtest7 fwtest8 genpot gensub gensub2 gensub3 \
@@ -2735,6 +2736,21 @@ dfacheck1:
@-AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+elemnew1:
+ @echo $@
+ @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
+elemnew2:
+ @echo $@
+ @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
+elemnew3:
+ @echo $@
+ @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
exit:
@echo $@
@-$(LOCALES) AWK="$(AWKPROG)" "$(srcdir)"/$@.sh > _$@ 2>&1 || echo EXIT CODE: $$? >>_$@
diff --git a/test/ChangeLog b/test/ChangeLog
index ea08ede..434cbd9 100644
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@ -1,7 +1,8 @@
2022-09-14 Arnold D. Robbins <arnold@skeeve.com>
- * Makefile.am (EXTRA_DIST): New test: elemnew1.
- * elemnew1.awk, elemnew1.ok: New files.
+ * Makefile.am (EXTRA_DIST): New tests: elemnew1, elemnew2, elemnew3.
+ * elemnew1.awk, elemnew1.ok, elemnew2.awk, elemnew2.ok,
+ elemnew3.awk, elemnew3.ok: New files.
2022-09-04 Arnold D. Robbins <arnold@skeeve.com>
diff --git a/test/Makefile.am b/test/Makefile.am
index 8a5c3c4..8b0a24e 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -284,6 +284,10 @@ EXTRA_DIST = \
dynlj.ok \
elemnew1.awk \
elemnew1.ok \
+ elemnew2.awk \
+ elemnew2.ok \
+ elemnew3.awk \
+ elemnew3.ok \
escapebrace.awk \
escapebrace.in \
escapebrace.ok \
@@ -1482,7 +1486,8 @@ GAWK_EXT_TESTS = \
binmode1 charasbytes clos1way clos1way2 clos1way3 clos1way4 \
clos1way5 clos1way6 colonwarn commas crlf dbugeval dbugeval2 \
dbugeval3 dbugtypedre1 dbugtypedre2 delsub devfd devfd1 devfd2 \
- dfacheck1 dumpvars elemnew1 errno exit fieldwdth forcenum fpat1 fpat2 \
+ dfacheck1 dumpvars elemnew1 elemnew2 elemnew3 \
+ errno exit fieldwdth forcenum fpat1 fpat2 \
fpat3 fpat4 fpat5 fpat6 fpat7 fpat8 fpat9 fpatnull fsfwfs functab1 \
functab2 functab3 functab6 funlen fwtest fwtest2 fwtest3 fwtest4 \
fwtest5 fwtest6 fwtest7 fwtest8 genpot gensub gensub2 gensub3 \
diff --git a/test/Makefile.in b/test/Makefile.in
index a4fb1cc..9240a42 100644
--- a/test/Makefile.in
+++ b/test/Makefile.in
@@ -552,6 +552,10 @@ EXTRA_DIST = \
dynlj.ok \
elemnew1.awk \
elemnew1.ok \
+ elemnew2.awk \
+ elemnew2.ok \
+ elemnew3.awk \
+ elemnew3.ok \
escapebrace.awk \
escapebrace.in \
escapebrace.ok \
@@ -1750,7 +1754,8 @@ GAWK_EXT_TESTS = \
binmode1 charasbytes clos1way clos1way2 clos1way3 clos1way4 \
clos1way5 clos1way6 colonwarn commas crlf dbugeval dbugeval2 \
dbugeval3 dbugtypedre1 dbugtypedre2 delsub devfd devfd1 devfd2 \
- dfacheck1 dumpvars elemnew1 errno exit fieldwdth forcenum fpat1 fpat2 \
+ dfacheck1 dumpvars elemnew1 elemnew2 elemnew3 \
+ errno exit fieldwdth forcenum fpat1 fpat2 \
fpat3 fpat4 fpat5 fpat6 fpat7 fpat8 fpat9 fpatnull fsfwfs functab1 \
functab2 functab3 functab6 funlen fwtest fwtest2 fwtest3 fwtest4 \
fwtest5 fwtest6 fwtest7 fwtest8 genpot gensub gensub2 gensub3 \
@@ -4483,6 +4488,16 @@ elemnew1:
@-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+elemnew2:
+ @echo $@
+ @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
+elemnew3:
+ @echo $@
+ @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
exit:
@echo $@
@-$(LOCALES) AWK="$(AWKPROG)" "$(srcdir)"/$@.sh > _$@ 2>&1 || echo EXIT CODE: $$? >>_$@
diff --git a/test/Maketests b/test/Maketests
index 90828e7..f7e749c 100644
--- a/test/Maketests
+++ b/test/Maketests
@@ -1437,6 +1437,16 @@ elemnew1:
@-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+elemnew2:
+ @echo $@
+ @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
+elemnew3:
+ @echo $@
+ @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
exit:
@echo $@
@-$(LOCALES) AWK="$(AWKPROG)" "$(srcdir)"/$@.sh > _$@ 2>&1 || echo EXIT CODE: $$? >>_$@
diff --git a/test/elemnew2.awk b/test/elemnew2.awk
new file mode 100644
index 0000000..08e7239
--- /dev/null
+++ b/test/elemnew2.awk
@@ -0,0 +1,6 @@
+function set_val(old) {
+ old[1] = 42
+}
+BEGIN {
+ a[0] = set_val(a[0])
+}
diff --git a/test/elemnew2.ok b/test/elemnew2.ok
new file mode 100644
index 0000000..d6f2d78
--- /dev/null
+++ b/test/elemnew2.ok
@@ -0,0 +1,2 @@
+gawk: elemnew2.awk:5: fatal: attempt to use array `a["0"]' in a scalar context
+EXIT CODE: 2
diff --git a/test/elemnew3.awk b/test/elemnew3.awk
new file mode 100644
index 0000000..39ac9a8
--- /dev/null
+++ b/test/elemnew3.awk
@@ -0,0 +1,8 @@
+function foo(x)
+{
+ if (x == int(x))
+ return (int(x) != 0)
+}
+BEGIN {
+ foo(P["bar"])
+}
diff --git a/test/elemnew3.ok b/test/elemnew3.ok
new file mode 100644
index 0000000..e69de29
--

View File

@ -1,70 +0,0 @@
From c0c9f468b12a79ad8277f0e2b9ff7d42f48490bf Mon Sep 17 00:00:00 2001
From: "Arnold D. Robbins" <arnold@skeeve.com>
Date: Tue, 25 Oct 2022 07:25:20 +0300
Subject: Code simplification in interpret.h.
Reference:https://git.savannah.gnu.org/cgit/gawk.git/patch/?id=c0c9f468b12a79ad8277f0e2b9ff7d42f48490bf
Conflict:tailoring commits on ChangeLog
---
interpret.h | 30 +++++++++++++++---------------
1 files changed, 15 insertions(+), 15 deletions(-)
diff --git a/interpret.h b/interpret.h
index f703080..4540d30 100644
--- a/interpret.h
+++ b/interpret.h
@@ -212,38 +212,38 @@ top:
case Node_var_new:
uninitialized_scalar:
- if (op != Op_push_arg_untyped) {
- /* convert very original untyped to scalar */
- m->type = Node_var;
- m->var_value = dupnode(Nnull_string);
- }
-
if (do_lint)
lintwarn(isparam ?
_("reference to uninitialized argument `%s'") :
_("reference to uninitialized variable `%s'"),
save_symbol->vname);
- // set up local param by value
- if (op != Op_push_arg_untyped)
- m = dupnode(Nnull_string);
- UPREF(m);
- PUSH(m);
- break;
- case Node_elem_new:
if (op != Op_push_arg_untyped) {
- /* convert very original untyped to scalar */
+ // convert very original untyped to scalar
m->type = Node_var;
m->var_value = dupnode(Nnull_string);
+
+ // set up local param by value
+ m = dupnode(Nnull_string);
}
+ UPREF(m);
+ PUSH(m);
+ break;
+
+ case Node_elem_new:
if (do_lint)
lintwarn(isparam ?
_("reference to uninitialized argument `%s'") :
_("reference to uninitialized variable `%s'"),
save_symbol->vname);
- // set up local param by value
+
if (op != Op_push_arg_untyped) {
+ // convert very original untyped to scalar
+ m->type = Node_var;
+ m->var_value = dupnode(Nnull_string);
+
+ // set up local param by value
DEREF(m);
m = dupnode(Nnull_string);
}
--

View File

@ -1,135 +0,0 @@
From baab183439ff4e0c6b77d62156d447e61fc1dcfb Mon Sep 17 00:00:00 2001
From: "Arnold D. Robbins" <arnold@skeeve.com>
Date: Wed, 14 Sep 2022 21:08:59 +0300
Subject: Fix a bug with Node_elem_new.
Reference:https://git.savannah.gnu.org/cgit/gawk.git/patch/?id=baab183439ff4e0c6b77d62156d447e61fc1dcfb
Conflict:tailoring commit on ChangeLog
---
interpret.h | 1 +
test/ChangeLog | 5 +++++
test/Makefile.am | 4 +++-
test/Makefile.in | 9 ++++++++-
test/Maketests | 5 +++++
test/elemnew1.awk | 9 +++++++++
test/elemnew1.ok | 0
7 files changed, 31 insertions(+), 2 deletions(-)
create mode 100644 test/elemnew1.awk
create mode 100644 test/elemnew1.ok
diff --git a/interpret.h b/interpret.h
index 57d060e..268655b 100644
--- a/interpret.h
+++ b/interpret.h
@@ -238,6 +238,7 @@ uninitialized_scalar:
_("reference to uninitialized argument `%s'") :
_("reference to uninitialized variable `%s'"),
save_symbol->vname);
+ UPREF(m);
PUSH(m);
break;
diff --git a/test/ChangeLog b/test/ChangeLog
index a73637b..ea08ede 100644
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@ -1,3 +1,8 @@
+2022-09-14 Arnold D. Robbins <arnold@skeeve.com>
+
+ * Makefile.am (EXTRA_DIST): New test: elemnew1.
+ * elemnew1.awk, elemnew1.ok: New files.
+
2022-09-04 Arnold D. Robbins <arnold@skeeve.com>
* 5.2.0: Release tar ball made.
diff --git a/test/Makefile.am b/test/Makefile.am
index ab06974..8a5c3c4 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -282,6 +282,8 @@ EXTRA_DIST = \
dumpvars.ok \
dynlj.awk \
dynlj.ok \
+ elemnew1.awk \
+ elemnew1.ok \
escapebrace.awk \
escapebrace.in \
escapebrace.ok \
@@ -1480,7 +1482,7 @@ GAWK_EXT_TESTS = \
binmode1 charasbytes clos1way clos1way2 clos1way3 clos1way4 \
clos1way5 clos1way6 colonwarn commas crlf dbugeval dbugeval2 \
dbugeval3 dbugtypedre1 dbugtypedre2 delsub devfd devfd1 devfd2 \
- dfacheck1 dumpvars errno exit fieldwdth forcenum fpat1 fpat2 \
+ dfacheck1 dumpvars elemnew1 errno exit fieldwdth forcenum fpat1 fpat2 \
fpat3 fpat4 fpat5 fpat6 fpat7 fpat8 fpat9 fpatnull fsfwfs functab1 \
functab2 functab3 functab6 funlen fwtest fwtest2 fwtest3 fwtest4 \
fwtest5 fwtest6 fwtest7 fwtest8 genpot gensub gensub2 gensub3 \
diff --git a/test/Makefile.in b/test/Makefile.in
index 834feb0..a4fb1cc 100644
--- a/test/Makefile.in
+++ b/test/Makefile.in
@@ -550,6 +550,8 @@ EXTRA_DIST = \
dumpvars.ok \
dynlj.awk \
dynlj.ok \
+ elemnew1.awk \
+ elemnew1.ok \
escapebrace.awk \
escapebrace.in \
escapebrace.ok \
@@ -1748,7 +1750,7 @@ GAWK_EXT_TESTS = \
binmode1 charasbytes clos1way clos1way2 clos1way3 clos1way4 \
clos1way5 clos1way6 colonwarn commas crlf dbugeval dbugeval2 \
dbugeval3 dbugtypedre1 dbugtypedre2 delsub devfd devfd1 devfd2 \
- dfacheck1 dumpvars errno exit fieldwdth forcenum fpat1 fpat2 \
+ dfacheck1 dumpvars elemnew1 errno exit fieldwdth forcenum fpat1 fpat2 \
fpat3 fpat4 fpat5 fpat6 fpat7 fpat8 fpat9 fpatnull fsfwfs functab1 \
functab2 functab3 functab6 funlen fwtest fwtest2 fwtest3 fwtest4 \
fwtest5 fwtest6 fwtest7 fwtest8 genpot gensub gensub2 gensub3 \
@@ -4476,6 +4478,11 @@ dfacheck1:
@-AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+elemnew1:
+ @echo $@
+ @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
exit:
@echo $@
@-$(LOCALES) AWK="$(AWKPROG)" "$(srcdir)"/$@.sh > _$@ 2>&1 || echo EXIT CODE: $$? >>_$@
diff --git a/test/Maketests b/test/Maketests
index 3a667af..90828e7 100644
--- a/test/Maketests
+++ b/test/Maketests
@@ -1432,6 +1432,11 @@ dfacheck1:
@-AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+elemnew1:
+ @echo $@
+ @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
exit:
@echo $@
@-$(LOCALES) AWK="$(AWKPROG)" "$(srcdir)"/$@.sh > _$@ 2>&1 || echo EXIT CODE: $$? >>_$@
diff --git a/test/elemnew1.awk b/test/elemnew1.awk
new file mode 100644
index 0000000..58dc9fc
--- /dev/null
+++ b/test/elemnew1.awk
@@ -0,0 +1,9 @@
+function add_flags(old) {
+ if (old)
+ return 0
+ if (!old)
+ return 1
+}
+BEGIN {
+ a[0]=add_flags(a[0])
+}
diff --git a/test/elemnew1.ok b/test/elemnew1.ok
new file mode 100644
index 0000000..e69de29
--

View File

@ -1,40 +0,0 @@
From bc8957f4f5e1aafd00c82b52f4c82997b7cfc183 Mon Sep 17 00:00:00 2001
From: "Arnold D. Robbins" <arnold@skeeve.com>
Date: Fri, 30 Sep 2022 12:59:47 +0300
Subject: Fix a memory leak.
Reference:https://git.savannah.gnu.org/cgit/gawk.git/patch/?id=bc8957f4f5e1aafd00c82b52f4c82997b7cfc183
Conflict:tailoring commit on ChangeLog
---
interpret.h | 3 +++
1 files changed, 3 insertions(+)
diff --git a/interpret.h b/interpret.h
index fde02d2..f703080 100644
--- a/interpret.h
+++ b/interpret.h
@@ -217,6 +217,7 @@ uninitialized_scalar:
m->type = Node_var;
m->var_value = dupnode(Nnull_string);
}
+
if (do_lint)
lintwarn(isparam ?
_("reference to uninitialized argument `%s'") :
@@ -235,6 +236,7 @@ uninitialized_scalar:
m->type = Node_var;
m->var_value = dupnode(Nnull_string);
}
+
if (do_lint)
lintwarn(isparam ?
_("reference to uninitialized argument `%s'") :
@@ -242,6 +244,7 @@ uninitialized_scalar:
save_symbol->vname);
// set up local param by value
if (op != Op_push_arg_untyped) {
+ DEREF(m);
m = dupnode(Nnull_string);
}
--

View File

@ -1,71 +0,0 @@
commit a3799ae3f5dd6648040d499224cc6dea61b355dd
Author: Arnold D. Robbins <arnold@skeeve.com>
Date: Mon Sep 19 18:51:28 2022 +0300
Fix negative NaN issue on RiscV.
diff --git a/ChangeLog b/ChangeLog
index 35941d0a..d751baf1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,0 +1,6 @@
+2022-09-19 Arnold D. Robbins <arnold@skeeve.com>
+
+ * eval.c (fix_nan_sign): New function. See bug list citation
+ in the code.
+ * interpret.h (r_interpret): Use it for plus and minus cases.
+
diff --git a/eval.c b/eval.c
index 1069570b..3bfff0ca 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,20 @@ elem_new_to_scalar(NODE *n)
return n;
}
+
+/* fix_nan_sign --- fix NaN sign on RiscV */
+
+// See the thread starting at
+// https://lists.gnu.org/archive/html/bug-gawk/2022-09/msg00005.html
+// for why we need this function.
+
+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 26010ada..955d918f 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;

File diff suppressed because it is too large Load Diff

Binary file not shown.

BIN
gawk-5.2.2.tar.xz Normal file

Binary file not shown.

View File

@ -3,8 +3,8 @@
%global gawk_api_minor %%(tar -xf %{name}-%{version}.tar.xz %{name}-%{version}/gawkapi.h --to-stdout |\
egrep -i "gawk_api_minor.*[0-9]+" | egrep -o "[0-9]")
Name: gawk
Version: 5.2.0
Release: 3
Version: 5.2.2
Release: 1
License: GPLv3+ and GPLv2+ and LGPLv2+ and BSD
Summary: The GNU version of the AWK text processing utility
URL: https://www.gnu.org/software/gawk/
@ -13,18 +13,10 @@ Source0: https://ftp.gnu.org/gnu/gawk/gawk-%{version}.tar.xz
#Patch1: Disable-racy-test-in-test-iolint.awk.patch
#Patch2: Restore-removed-test-in-test-iolint.awk.patch
#Patch3: Reorder-statements-in-iolint-to-try-to-eliminate-a-r.patch
Patch4: pma.patch
Patch5: Disable-pma-test.awk.patch
Patch6: backport-Fix-a-bug-with-Node_elem_new.patch
Patch7: backport-Additional-fix-for-Node_elem_new.patch
Patch8: backport-Yet-another-fix-and-test-for-Node_elem_new.patch
Patch9: backport-Fix-a-memory-leak.patch
Patch10: backport-Code-simplification-in-interpret.h.patch
Patch11: backport-Fix-negative-NaN-issue-on-RiscV.patch
BuildRequires: gcc automake grep
BuildRequires: bison texinfo texinfo-tex ghostscript texlive-ec texlive-cm-super glibc-all-langpacks
BuildRequires: bison texinfo >= 7.0.1 texinfo-tex >= 7.0.1 ghostscript texlive-ec texlive-cm-super glibc-all-langpacks
BuildRequires: libsigsegv-devel mpfr-devel readline-devel
Requires: filesystem >= 3
@ -112,11 +104,15 @@ install -m 0644 -p doc/gawkinet.{pdf,ps} ${RPM_BUILD_ROOT}%{_docdir}/%{name}
%doc %{_docdir}/%{name}/html
%{_mandir}/man{1/*,3/*}
%{_infodir}/*awk*.info*
%{_infodir}/gawk_*
%files lang
%{_datadir}/locale/*
%changelog
* Mon Oct 9 2023 huyubiao <huyubiao@huawei.com> - 5.2.2-1
- update gawk to 5.2.2
* Thu Jan 19 2023 laokz <zhangkai@iscas.ac.cn> - 5.2.0-3
- Type:bugfix
- ID:NA

View File

@ -1,40 +0,0 @@
Index: gawk-5.2.0/support/pma.c
===================================================================
--- gawk-5.2.0.orig/support/pma.c
+++ gawk-5.2.0/support/pma.c
@@ -340,16 +340,20 @@ static void flr(ao_t *p) { // remove ao
#define MMAP(N) mmap(NULL, (N), PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_NORESERVE, -1, 0)
#define MUNMAP(A, N) do { if (0 != munmap((A), (N))) { ERR("munmap()" ERN); SERN; } } while (0)
static void * addrgap(off_t n) { // find big gap in address space to map n bytes
- void *A, *Amax = NULL; size_t L = 0, U, Max = 0, N = (size_t)n; char *r;
+ void *A, *Amax = NULL; size_t L, U, Max = 0, N = (size_t)n; char *r;
FYI("addrgap(%jd)\n", (intmax_t)n); // TODO: better way to handle off_t
if (N < sizeof(pma_hdr_t) + 40960) { ERR("file size %zu too small\n", N); SERN; }
- for (U = 1; ; U *= 2) // double upper bound until failure
- if (MAP_FAILED == (A = MMAP(U))) break;
- else MUNMAP(A, U);
- while (1 + L < U) { // binary search between bounds
+ // Binary search to find max length of successfull mmap().
+ // Invariants:
+ // Larger max might lie in range [L,U] inclusive.
+ // If a previous max has been found, it must lie in [1,L-1].
+ // A larger max cannot lie in [U+1,UINT64_MAX].
+ L = 1; // mmap fails if length == 0 (SUSv3)
+ U = UINT64_MAX;
+ while (L <= U) {
size_t M = L + (U - L) / 2; // avoid overflow
- if (MAP_FAILED == (A = MMAP(M))) { U = M; }
- else { Amax = A; Max = M; MUNMAP(A, M); L = M; }
+ if (MAP_FAILED != (A = MMAP(M))) { assert(Max < M); Max = M; Amax = A; MUNMAP(A, M); if (UINT64_MAX == M) break; L = M + 1; }
+ else { assert(0 < M); U = M - 1; }
}
FYI("max gap: %zu bytes at %p\n", Max, Amax);
if (Max < N + (size_t)ALGN * 2) { // safety margin
@@ -392,6 +396,7 @@ int pma_init(int verbose, const char *fi
assert((himask | lomask) == ~((uintptr_t)0));
if (! (WDSZ == sizeof(void *) && // in C11 we'd static_assert()
WDSZ == sizeof(size_t) &&
+ WDSZ == sizeof(off_t) &&
WDSZ == sizeof(unsigned long))) { ERR("word size not 64 bits\n"); SERL; }
assert(0 == sizeof(pma_hdr_t) % WDSZ);
if (NULL == file) {