!36 update gawk to 5.2.2
From: @huyubiao Reviewed-by: @licunlong Signed-off-by: @licunlong
This commit is contained in:
commit
d6e1efe52e
@ -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
|
|
||||||
--
|
|
||||||
@ -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);
|
|
||||||
}
|
|
||||||
--
|
|
||||||
@ -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
|
|
||||||
--
|
|
||||||
@ -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);
|
|
||||||
}
|
|
||||||
|
|
||||||
--
|
|
||||||
@ -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
BIN
gawk-5.2.2.tar.xz
Normal file
Binary file not shown.
18
gawk.spec
18
gawk.spec
@ -3,8 +3,8 @@
|
|||||||
%global gawk_api_minor %%(tar -xf %{name}-%{version}.tar.xz %{name}-%{version}/gawkapi.h --to-stdout |\
|
%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]")
|
egrep -i "gawk_api_minor.*[0-9]+" | egrep -o "[0-9]")
|
||||||
Name: gawk
|
Name: gawk
|
||||||
Version: 5.2.0
|
Version: 5.2.2
|
||||||
Release: 3
|
Release: 1
|
||||||
License: GPLv3+ and GPLv2+ and LGPLv2+ and BSD
|
License: GPLv3+ and GPLv2+ and LGPLv2+ and BSD
|
||||||
Summary: The GNU version of the AWK text processing utility
|
Summary: The GNU version of the AWK text processing utility
|
||||||
URL: https://www.gnu.org/software/gawk/
|
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
|
#Patch1: Disable-racy-test-in-test-iolint.awk.patch
|
||||||
#Patch2: Restore-removed-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
|
#Patch3: Reorder-statements-in-iolint-to-try-to-eliminate-a-r.patch
|
||||||
Patch4: pma.patch
|
|
||||||
Patch5: Disable-pma-test.awk.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: 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
|
BuildRequires: libsigsegv-devel mpfr-devel readline-devel
|
||||||
Requires: filesystem >= 3
|
Requires: filesystem >= 3
|
||||||
|
|
||||||
@ -112,11 +104,15 @@ install -m 0644 -p doc/gawkinet.{pdf,ps} ${RPM_BUILD_ROOT}%{_docdir}/%{name}
|
|||||||
%doc %{_docdir}/%{name}/html
|
%doc %{_docdir}/%{name}/html
|
||||||
%{_mandir}/man{1/*,3/*}
|
%{_mandir}/man{1/*,3/*}
|
||||||
%{_infodir}/*awk*.info*
|
%{_infodir}/*awk*.info*
|
||||||
|
%{_infodir}/gawk_*
|
||||||
|
|
||||||
%files lang
|
%files lang
|
||||||
%{_datadir}/locale/*
|
%{_datadir}/locale/*
|
||||||
|
|
||||||
%changelog
|
%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
|
* Thu Jan 19 2023 laokz <zhangkai@iscas.ac.cn> - 5.2.0-3
|
||||||
- Type:bugfix
|
- Type:bugfix
|
||||||
- ID:NA
|
- ID:NA
|
||||||
|
|||||||
40
pma.patch
40
pma.patch
@ -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) {
|
|
||||||
Loading…
x
Reference in New Issue
Block a user