aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2017-05-20 23:15:17 +0300
committerArnold D. Robbins <arnold@skeeve.com>2017-05-20 23:15:17 +0300
commita3d548382b056d681d9cca957a683931212880b2 (patch)
tree5ae269fd3ee7feff6d9330419fa6d77c8ba21010
parent063ac75f58041edcca56cc0112ecf5764ebaea52 (diff)
parent0f9d4355a03d000938d87d71ba62f0ac2717334a (diff)
downloadegawk-a3d548382b056d681d9cca957a683931212880b2.tar.gz
egawk-a3d548382b056d681d9cca957a683931212880b2.tar.bz2
egawk-a3d548382b056d681d9cca957a683931212880b2.zip
Merge branch 'master' into feature/fix-comments
-rw-r--r--ChangeLog5
-rw-r--r--awkgram.c18
-rw-r--r--awkgram.y18
-rw-r--r--test/ChangeLog4
-rw-r--r--test/README6
-rw-r--r--test/noeffect.awk1
-rw-r--r--test/noeffect.ok1
7 files changed, 45 insertions, 8 deletions
diff --git a/ChangeLog b/ChangeLog
index 79d9aa1a..e1642d44 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2017-05-20 Arnold D. Robbins <arnold@skeeve.com>
+
+ * awkgram.y (add_lint): Make ``no effect'' check smarter about
+ reporting line numbers.
+
2017-05-01 Arnold D. Robbins <arnold@skeeve.com>
* awkgram.y (nextc): Fix to change of 2017-04-24 such that
diff --git a/awkgram.c b/awkgram.c
index 76288670..c022782b 100644
--- a/awkgram.c
+++ b/awkgram.c
@@ -8349,12 +8349,22 @@ add_lint(INSTRUCTION *list, LINTTYPE linttype)
case LINT_no_effect:
if (list->lasti->opcode == Op_pop && list->nexti != list->lasti) {
- for (ip = list->nexti; ip->nexti != list->lasti; ip = ip->nexti)
- ;
+ int line = 0;
+
+ // Get down to the last instruction (FIXME: why?)
+ for (ip = list->nexti; ip->nexti != list->lasti; ip = ip->nexti) {
+ // along the way track line numbers, we will use the line
+ // closest to the opcode if that opcode doesn't have one
+ if (ip->source_line != 0)
+ line = ip->source_line;
+ }
if (do_lint) { /* compile-time warning */
- if (isnoeffect(ip->opcode))
- lintwarn_ln(ip->source_line, ("statement may have no effect"));
+ if (isnoeffect(ip->opcode)) {
+ if (ip->source_line != 0)
+ line = ip->source_line;
+ lintwarn_ln(line, ("statement may have no effect"));
+ }
}
if (ip->opcode == Op_push) { /* run-time warning */
diff --git a/awkgram.y b/awkgram.y
index a3adf2d6..7d24e83e 100644
--- a/awkgram.y
+++ b/awkgram.y
@@ -5921,12 +5921,22 @@ add_lint(INSTRUCTION *list, LINTTYPE linttype)
case LINT_no_effect:
if (list->lasti->opcode == Op_pop && list->nexti != list->lasti) {
- for (ip = list->nexti; ip->nexti != list->lasti; ip = ip->nexti)
- ;
+ int line = 0;
+
+ // Get down to the last instruction (FIXME: why?)
+ for (ip = list->nexti; ip->nexti != list->lasti; ip = ip->nexti) {
+ // along the way track line numbers, we will use the line
+ // closest to the opcode if that opcode doesn't have one
+ if (ip->source_line != 0)
+ line = ip->source_line;
+ }
if (do_lint) { /* compile-time warning */
- if (isnoeffect(ip->opcode))
- lintwarn_ln(ip->source_line, ("statement may have no effect"));
+ if (isnoeffect(ip->opcode)) {
+ if (ip->source_line != 0)
+ line = ip->source_line;
+ lintwarn_ln(line, ("statement may have no effect"));
+ }
}
if (ip->opcode == Op_push) { /* run-time warning */
diff --git a/test/ChangeLog b/test/ChangeLog
index 2ef21c6f..2942f7be 100644
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@ -1,3 +1,7 @@
+2017-05-20 Arnold D. Robbins <arnold@skeeve.com>
+
+ * noeffect.awk, noeffect.ok: Updated after code change.
+
2017-05-01 Aharon Robbins <aharon.robbins@intel.com>
* Makefile.am (sourcesplit): New test.
diff --git a/test/README b/test/README
index 2343be2f..61976b8a 100644
--- a/test/README
+++ b/test/README
@@ -1,4 +1,5 @@
Mon Jan 22 13:08:58 EST 1996
+============================
This directory contains the tests for gawk. The tests use the
following conventions.
@@ -16,3 +17,8 @@ compare actual and expected results, in case they differ.
If they do differ (other than strftime.ok and _strftime!), send in a
bug report. See the manual for the bug report procedure.
+
+Known Issues:
+=============
+May 2017: On a system with no ptys available, the pty1 test will hang.
+There isn't anything that can be done about this.
diff --git a/test/noeffect.awk b/test/noeffect.awk
index b67a5c57..472c408e 100644
--- a/test/noeffect.awk
+++ b/test/noeffect.awk
@@ -2,4 +2,5 @@ BEGIN {
s == "hello, world";
s + 1
;;
+ "s" 1
}
diff --git a/test/noeffect.ok b/test/noeffect.ok
index e9bed995..6a0cc752 100644
--- a/test/noeffect.ok
+++ b/test/noeffect.ok
@@ -1,4 +1,5 @@
gawk: noeffect.awk:2: warning: statement may have no effect
gawk: noeffect.awk:3: warning: statement may have no effect
+gawk: noeffect.awk:5: warning: statement may have no effect
gawk: noeffect.awk:2: warning: reference to uninitialized variable `s'
gawk: noeffect.awk:3: warning: reference to uninitialized variable `s'