TL;DR: EmitterWriter::get_max_line_num unconditionally returns self.get_multispan_max_line_num(span) no matter what is contained in children.
Longer explanation: let's take a look at the code of method (it's rather short):
fn get_max_line_num(&mut self, span: &MultiSpan, children: &[SubDiagnostic]) -> usize {
let mut max = 0;
let primary = self.get_multispan_max_line_num(span);
max = if primary > max { primary } else { max };
for sub in children {
let sub_result = self.get_multispan_max_line_num(&sub.span);
max = if sub_result > max { primary } else { max };
}
max
}
Here self.get_multispan_max_line_num(span) returns a plain usize. Firstly, since 0 is the smallest possible value of usize, the first three lines can be rewritten without changing the meaning as
let primary = self.get_multispan_max_line_num(span);
let mut max = primary;
So after executing these lines max == primary. Secondly, in the loop if compares sub_result with max but assigns either max or primary. If max == primary in the beginning of iteration, then this also holds in the end of iteration. Since this preposition holds before executing the loop, it also holds after executing the loop, so the whole method just returns primary, QED.
Erroneous code was introduced in 71ec286.
Unfortunately, I'm not familliar enough with the code to propose the correct fix.
TL;DR:
EmitterWriter::get_max_line_numunconditionally returnsself.get_multispan_max_line_num(span)no matter what is contained inchildren.Longer explanation: let's take a look at the code of method (it's rather short):
Here
self.get_multispan_max_line_num(span)returns a plainusize. Firstly, since0is the smallest possible value ofusize, the first three lines can be rewritten without changing the meaning asSo after executing these lines
max == primary. Secondly, in the loopifcomparessub_resultwithmaxbut assigns eithermaxorprimary. Ifmax == primaryin the beginning of iteration, then this also holds in the end of iteration. Since this preposition holds before executing the loop, it also holds after executing the loop, so the whole method just returnsprimary, QED.Erroneous code was introduced in 71ec286.
Unfortunately, I'm not familliar enough with the code to propose the correct fix.