fix a bug in compiletest JSON parsing for duplicate errors

In some cases, we give multiple primary spans, in which case we would
report one `//~` annotation per primary span. That was very confusing
because these things are reported to the user as a single error.

UI tests would be better here.
This commit is contained in:
Niko Matsakis 2017-04-11 16:58:04 -04:00
parent 77d9e38e94
commit 14f1e3459f
7 changed files with 1 additions and 7 deletions

View file

@ -62,7 +62,6 @@ fn mut_plus_immut() {
&mut f
+
&f; //~ ERROR: cannot borrow `f` as immutable because it is also borrowed as mutable
//~^ cannot borrow `f` as immutable because it is also borrowed as mutable
}
fn immut_plus_mut() {
@ -71,7 +70,6 @@ fn immut_plus_mut() {
&f
+
&mut f; //~ ERROR: cannot borrow `f` as mutable because it is also borrowed as immutable
//~^ cannot borrow `f` as mutable because it is also borrowed as immutable
}
fn main() {}

View file

@ -109,7 +109,6 @@ fn while_aliased_mut_cond(cond: bool, cond2: bool) {
borrow(&*v); //~ ERROR cannot borrow
if cond2 {
x = &mut v; //~ ERROR cannot borrow
//~^ ERROR cannot borrow
}
}
}

View file

@ -19,7 +19,6 @@ fn main() {
match 1 {
1 => { addr = &mut x; }
//~^ ERROR cannot borrow `x` as mutable more than once at a time
//~| ERROR cannot borrow `x` as mutable more than once at a time
2 => { addr = &mut x; }
//~^ ERROR cannot borrow `x` as mutable more than once at a time
_ => { addr = &mut x; }

View file

@ -17,7 +17,6 @@ fn causes_ice(mut l: &mut Sexpression) {
loop { match l {
&mut Sexpression::Num(ref mut n) => {},
&mut Sexpression::Cons(ref mut expr) => { //~ ERROR cannot borrow `l.0`
//~| ERROR cannot borrow `l.0`
l = &mut **expr; //~ ERROR cannot assign to `l`
}
}}

View file

@ -11,7 +11,6 @@
fn main() {
let Box(a) = loop { };
//~^ ERROR expected tuple struct/variant, found struct `Box`
//~| ERROR expected tuple struct/variant, found struct `Box`
// (The below is a trick to allow compiler to infer a type for
// variable `a` without attempting to ascribe a type to the

View file

@ -21,7 +21,6 @@ use std::fmt::{};
// Should get errors for both 'Some' and 'None'
use std::option::Option::{Some, None};
//~^ ERROR unused imports: `None`, `Some`
//~| ERROR unused imports: `None`, `Some`
use test::A; //~ ERROR unused import: `test::A`
// Be sure that if we just bring some methods into scope that they're also

View file

@ -97,6 +97,7 @@ fn push_expected_errors(expected_errors: &mut Vec<Error>,
let primary_spans: Vec<_> = spans_in_this_file.iter()
.cloned()
.filter(|span| span.is_primary)
.take(1) // sometimes we have more than one showing up in the json; pick first
.collect();
let primary_spans = if primary_spans.is_empty() {
// subdiagnostics often don't have a span of their own;