aboutsummaryrefslogtreecommitdiffstats
path: root/awkgram.c
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2017-05-20 22:28:59 +0300
committerArnold D. Robbins <arnold@skeeve.com>2017-05-20 22:28:59 +0300
commit0f9d4355a03d000938d87d71ba62f0ac2717334a (patch)
treec275e9f3dbef7112211e036fc42535c93651c386 /awkgram.c
parent5dad1227c5c8a14641aaeb78cdd423d584890c24 (diff)
downloadegawk-0f9d4355a03d000938d87d71ba62f0ac2717334a.tar.gz
egawk-0f9d4355a03d000938d87d71ba62f0ac2717334a.tar.bz2
egawk-0f9d4355a03d000938d87d71ba62f0ac2717334a.zip
Make lint checking for "no effect" case smarter about line numbers.
Diffstat (limited to 'awkgram.c')
-rw-r--r--awkgram.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/awkgram.c b/awkgram.c
index 1d06c4d9..4325e77d 100644
--- a/awkgram.c
+++ b/awkgram.c
@@ -8324,12 +8324,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 */