diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | awkgram.c | 18 | ||||
-rw-r--r-- | awkgram.y | 18 | ||||
-rw-r--r-- | test/ChangeLog | 4 | ||||
-rw-r--r-- | test/README | 6 | ||||
-rw-r--r-- | test/noeffect.awk | 1 | ||||
-rw-r--r-- | test/noeffect.ok | 1 |
7 files changed, 45 insertions, 8 deletions
@@ -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 @@ -8328,12 +8328,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 */ @@ -5908,12 +5908,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 9cca7b30..b7f18d9b 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' |