return false;
}
- let mut changed = false;
+ let mut any_changed = false;
self.indices2(ln, succ_ln, |this, idx, succ_idx| {
+ // This is a special case, pulled out from the code below, where we
+ // don't have to do anything. It occurs about 60-70% of the time.
+ if this.rwu_table.packed_rwus[succ_idx] == INV_INV_FALSE {
+ return;
+ }
+
+ let mut changed = false;
let mut rwu = this.rwu_table.get(idx);
let succ_rwu = this.rwu_table.get(succ_idx);
if succ_rwu.reader.is_valid() && !rwu.reader.is_valid() {
if changed {
this.rwu_table.assign_unpacked(idx, rwu);
+ any_changed = true;
}
});
ln,
self.ln_str(succ_ln),
first_merge,
- changed
+ any_changed
);
- return changed;
+ return any_changed;
}
// Indicates that a local variable was *defined*; we know that no
if ln == self.s.exit_ln { false } else { self.assigned_on_exit(ln, var).is_some() };
if is_assigned {
- self.ir.tcx.lint_hir_note(
- lint::builtin::UNUSED_VARIABLES,
- hir_id,
- spans,
- &format!("variable `{}` is assigned to, but never used", name),
- &format!("consider using `_{}` instead", name),
- );
+ self.ir
+ .tcx
+ .struct_span_lint_hir(
+ lint::builtin::UNUSED_VARIABLES,
+ hir_id,
+ spans,
+ &format!("variable `{}` is assigned to, but never used", name),
+ )
+ .note(&format!("consider using `_{}` instead", name))
+ .emit();
} else {
let mut err = self.ir.tcx.struct_span_lint_hir(
lint::builtin::UNUSED_VARIABLES,