diff --git a/src/parser.rs b/src/parser.rs index 761084577..35e20e3e2 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -423,12 +423,20 @@ pub fn parse_gcov_gz(gcov_path: &Path) -> Result, Parse let mut lines = BTreeMap::new(); let mut branches = BTreeMap::new(); for mut line in file.lines.drain(..) { - lines.insert(line.line_number, line.count); + lines + .entry(line.line_number) + .and_modify(|v| *v += line.count) + .or_insert(line.count); if !line.branches.is_empty() { - branches.insert( - line.line_number, - line.branches.drain(..).map(|b| b.count > 0).collect(), - ); + let values: Vec = line.branches.drain(..).map(|b| b.count > 0).collect(); + branches + .entry(line.line_number) + .and_modify(|v: &mut Vec| { + v.iter_mut() + .zip(values.iter()) + .for_each(|(val, newval)| *val &= newval) + }) + .or_insert(values); } } if lines.is_empty() {