chiark / gitweb /
generate: Mention suppressions when warning re VAR vs &VAR
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 29 Dec 2019 15:56:44 +0000 (15:56 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 30 Dec 2019 12:00:34 +0000 (12:00 +0000)
When we are actually printing the warning, report all the locations,
including the suppressed ones.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
generate
tests/filter/stderr.expected

index 15e2235d68000c14306eeb477e215c27717cbc92..ad8c9eadecf8ae1df38183cdb8e010cd53fff865 100755 (executable)
--- a/generate
+++ b/generate
@@ -263,8 +263,8 @@ sub process_input_mk ($$$$) {
     # accurate, since it is only going to be used for advice to the user.
     my $note_varref = sub {
        my ($vn,$amp) = @_;
-       return if $varref_exp{$vn}{$amp};
-       $varref{$vn}{$amp}{"$f:$."} = 1;
+       my $exp = !!$varref_exp{$vn}{$amp};
+       $varref{$vn}{$exp}{$amp}{"$f:$."} = 1;
     };
 
     while (<$input>) {
@@ -530,15 +530,20 @@ sub flmap ($) { local ($_) = @_; s{:(\d+)$}{ sprintf ":%10d", $1 }e; $_; }
 sub print_varref_warnings () {
     foreach my $vn (sort keys %varref) {
        my $vv = $varref{$vn};
-       next unless $vv->{''} && $vv->{1};
+       next unless $vv->{''}{''} && $vv->{''}{1};
        wrncore 'local+global', "saw both $vn and &$vn" or return;
+       foreach my $exp ('', 1) {
        foreach my $amp ('', 1) {
-           printf STDERR " saw %s%s at %s\n",
+           printf STDERR
+               ($exp
+                ? " expectedly saw %s%s at %s\n"
+                : " saw %s%s at %s\n"),
                ($amp ? '&' : ''), $vn, $_
                foreach
                sort { flmap($a) cmp flmap($b) }
-               keys %{ $vv->{$amp} };
+               keys %{ $vv->{$exp}{$amp} };
        }
+        }
     }
 }
 
index 5d777c2c5c3bc4bcef98fc4bb1c6c74fef854c9f..a53c7f7a7bb2e0c0dc834593988bab22bfdac8f6 100644 (file)
@@ -4,6 +4,7 @@ subdirmk: warning (broken-var-ref): ./Dir.sd.mk:19: broken $&... expansion; you
 subdirmk: warning (local+global): saw both NOWARN1 and &NOWARN1
  saw NOWARN1 at ./sub/dir/Dir.sd.mk:21
  saw &NOWARN1 at ./Dir.sd.mk:14
+ expectedly saw NOWARN1 at ./Dir.sd.mk:14
 subdirmk: warning (local+global): saw both WARN and &WARN
  saw WARN at ./Dir.sd.mk:6
  saw WARN at ./Dir.sd.mk:9
@@ -14,4 +15,5 @@ subdirmk: warning (local+global): saw both WARN and &WARN
  saw &WARN at ./Dir.sd.mk:11
  saw &WARN at ./sub/dir/Dir.sd.mk:15
  saw &WARN at ./sub/dir/Dir.sd.mk:24
+ expectedly saw &WARN at ./sub/dir/Dir.sd.mk:18
 subdirmk: warning (unknown-warning): ./sub/dir/Dir.sd.mk:3: attempt to suppress unknown warning(s) `some-unknown-warning'