Guarantee rustc_dump_user_substs
error order.
This commit buffers the errors output by the `rustc_dump_user_substs` attribute so that they can be output in order of span and would therefore be consistent.
This commit is contained in:
parent
0bfe184b1a
commit
c20ba65a0b
2 changed files with 24 additions and 9 deletions
|
@ -3,6 +3,7 @@
|
||||||
// substitutions.
|
// substitutions.
|
||||||
|
|
||||||
use check::FnCtxt;
|
use check::FnCtxt;
|
||||||
|
use errors::DiagnosticBuilder;
|
||||||
use rustc::hir;
|
use rustc::hir;
|
||||||
use rustc::hir::def_id::{DefId, DefIndex};
|
use rustc::hir::def_id::{DefId, DefIndex};
|
||||||
use rustc::hir::intravisit::{self, NestedVisitorMap, Visitor};
|
use rustc::hir::intravisit::{self, NestedVisitorMap, Visitor};
|
||||||
|
@ -357,6 +358,7 @@ impl<'cx, 'gcx, 'tcx> WritebackCx<'cx, 'gcx, 'tcx> {
|
||||||
debug_assert_eq!(fcx_tables.local_id_root, self.tables.local_id_root);
|
debug_assert_eq!(fcx_tables.local_id_root, self.tables.local_id_root);
|
||||||
let common_local_id_root = fcx_tables.local_id_root.unwrap();
|
let common_local_id_root = fcx_tables.local_id_root.unwrap();
|
||||||
|
|
||||||
|
let mut errors_buffer = Vec::new();
|
||||||
for (&local_id, c_ty) in fcx_tables.user_provided_types().iter() {
|
for (&local_id, c_ty) in fcx_tables.user_provided_types().iter() {
|
||||||
let hir_id = hir::HirId {
|
let hir_id = hir::HirId {
|
||||||
owner: common_local_id_root.index,
|
owner: common_local_id_root.index,
|
||||||
|
@ -382,10 +384,23 @@ impl<'cx, 'gcx, 'tcx> WritebackCx<'cx, 'gcx, 'tcx> {
|
||||||
// This is a unit-testing mechanism.
|
// This is a unit-testing mechanism.
|
||||||
let node_id = self.tcx().hir().hir_to_node_id(hir_id);
|
let node_id = self.tcx().hir().hir_to_node_id(hir_id);
|
||||||
let span = self.tcx().hir().span(node_id);
|
let span = self.tcx().hir().span(node_id);
|
||||||
self.tcx().sess.span_err(span, &format!("user substs: {:?}", user_substs));
|
// We need to buffer the errors in order to guarantee a consistent
|
||||||
|
// order when emitting them.
|
||||||
|
let err = self.tcx().sess.struct_span_err(
|
||||||
|
span,
|
||||||
|
&format!("user substs: {:?}", user_substs)
|
||||||
|
);
|
||||||
|
err.buffer(&mut errors_buffer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !errors_buffer.is_empty() {
|
||||||
|
errors_buffer.sort_by_key(|diag| diag.span.primary_span());
|
||||||
|
for diag in errors_buffer.drain(..) {
|
||||||
|
DiagnosticBuilder::new_diagnostic(self.tcx().sess.diagnostic(), diag).emit();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn visit_user_provided_sigs(&mut self) {
|
fn visit_user_provided_sigs(&mut self) {
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
error: user substs: UserSubsts { substs: [^0, ^1, u32], user_self_ty: None }
|
error: user substs: UserSubsts { substs: [u32], user_self_ty: None }
|
||||||
--> $DIR/dump-fn-method.rs:44:5
|
--> $DIR/dump-fn-method.rs:26:13
|
||||||
|
|
|
|
||||||
LL | y.method::<u32>(44, 66); //~ ERROR [^0, ^1, u32]
|
LL | let x = foo::<u32>; //~ ERROR [u32]
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^
|
||||||
|
|
||||||
error: user substs: UserSubsts { substs: [^0, u32, ^1], user_self_ty: None }
|
error: user substs: UserSubsts { substs: [^0, u32, ^1], user_self_ty: None }
|
||||||
--> $DIR/dump-fn-method.rs:32:13
|
--> $DIR/dump-fn-method.rs:32:13
|
||||||
|
@ -16,11 +16,11 @@ error: user substs: UserSubsts { substs: [u8, u16, u32], user_self_ty: None }
|
||||||
LL | let x = <u8 as Bazoom<u16>>::method::<u32>; //~ ERROR [u8, u16, u32]
|
LL | let x = <u8 as Bazoom<u16>>::method::<u32>; //~ ERROR [u8, u16, u32]
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
error: user substs: UserSubsts { substs: [u32], user_self_ty: None }
|
error: user substs: UserSubsts { substs: [^0, ^1, u32], user_self_ty: None }
|
||||||
--> $DIR/dump-fn-method.rs:26:13
|
--> $DIR/dump-fn-method.rs:44:5
|
||||||
|
|
|
|
||||||
LL | let x = foo::<u32>; //~ ERROR [u32]
|
LL | y.method::<u32>(44, 66); //~ ERROR [^0, ^1, u32]
|
||||||
| ^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
error: aborting due to 4 previous errors
|
error: aborting due to 4 previous errors
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue