Skip to content

Commit 9d21aca

Browse files
committed
Auto merge of #30953 - KalitaAlexey:17823-get-rid-of-duplicate-error, r=nrc
2 parents 257d324 + 8a41eb5 commit 9d21aca

14 files changed

+22
-112
lines changed

src/librustc/middle/infer/error_reporting.rs

+14-3
Original file line numberDiff line numberDiff line change
@@ -486,13 +486,24 @@ impl<'a, 'tcx> ErrorReporting<'tcx> for InferCtxt<'a, 'tcx> {
486486
}
487487
};
488488

489+
let is_simple_error = if let &TypeError::Sorts(ref values) = terr {
490+
values.expected.is_primitive() && values.found.is_primitive()
491+
} else {
492+
false
493+
};
494+
495+
let expected_found_str = if is_simple_error {
496+
expected_found_str
497+
} else {
498+
format!("{} ({})", expected_found_str, terr)
499+
};
500+
489501
let mut err = struct_span_err!(self.tcx.sess,
490502
trace.origin.span(),
491503
E0308,
492-
"{}: {} ({})",
504+
"{}: {}",
493505
trace.origin,
494-
expected_found_str,
495-
terr);
506+
expected_found_str);
496507

497508
self.check_and_note_conflicting_crates(&mut err, terr, trace.origin.span());
498509

src/librustc/middle/ty/sty.rs

+7
Original file line numberDiff line numberDiff line change
@@ -910,6 +910,13 @@ impl<'tcx> TyS<'tcx> {
910910
}
911911
}
912912

913+
pub fn is_primitive(&self) -> bool {
914+
match self.sty {
915+
TyBool | TyChar | TyInt(_) | TyUint(_) | TyFloat(_) => true,
916+
_ => false,
917+
}
918+
}
919+
913920
pub fn is_ty_var(&self) -> bool {
914921
match self.sty {
915922
TyInfer(TyVar(_)) => true,

src/test/compile-fail/if-branch-types.rs

-2
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,4 @@ fn main() {
1313
//~^ ERROR if and else have incompatible types
1414
//~| expected `i32`
1515
//~| found `u32`
16-
//~| expected i32
17-
//~| found u32
1816
}

src/test/compile-fail/integer-literal-suffix-inference.rs

-72
Original file line numberDiff line numberDiff line change
@@ -43,238 +43,166 @@ fn main() {
4343
//~^ ERROR mismatched types
4444
//~| expected `i8`
4545
//~| found `i16`
46-
//~| expected i8
47-
//~| found i16
4846
id_i8(a32);
4947
//~^ ERROR mismatched types
5048
//~| expected `i8`
5149
//~| found `i32`
52-
//~| expected i8
53-
//~| found i32
5450
id_i8(a64);
5551
//~^ ERROR mismatched types
5652
//~| expected `i8`
5753
//~| found `i64`
58-
//~| expected i8
59-
//~| found i64
6054

6155
id_i16(a8);
6256
//~^ ERROR mismatched types
6357
//~| expected `i16`
6458
//~| found `i8`
65-
//~| expected i16
66-
//~| found i8
6759
id_i16(a16); // ok
6860
id_i16(a32);
6961
//~^ ERROR mismatched types
7062
//~| expected `i16`
7163
//~| found `i32`
72-
//~| expected i16
73-
//~| found i32
7464
id_i16(a64);
7565
//~^ ERROR mismatched types
7666
//~| expected `i16`
7767
//~| found `i64`
78-
//~| expected i16
79-
//~| found i64
8068

8169
id_i32(a8);
8270
//~^ ERROR mismatched types
8371
//~| expected `i32`
8472
//~| found `i8`
85-
//~| expected i32
86-
//~| found i8
8773
id_i32(a16);
8874
//~^ ERROR mismatched types
8975
//~| expected `i32`
9076
//~| found `i16`
91-
//~| expected i32
92-
//~| found i16
9377
id_i32(a32); // ok
9478
id_i32(a64);
9579
//~^ ERROR mismatched types
9680
//~| expected `i32`
9781
//~| found `i64`
98-
//~| expected i32
99-
//~| found i64
10082

10183
id_i64(a8);
10284
//~^ ERROR mismatched types
10385
//~| expected `i64`
10486
//~| found `i8`
105-
//~| expected i64
106-
//~| found i8
10787
id_i64(a16);
10888
//~^ ERROR mismatched types
10989
//~| expected `i64`
11090
//~| found `i16`
111-
//~| expected i64
112-
//~| found i16
11391
id_i64(a32);
11492
//~^ ERROR mismatched types
11593
//~| expected `i64`
11694
//~| found `i32`
117-
//~| expected i64
118-
//~| found i32
11995
id_i64(a64); // ok
12096

12197
id_i8(c8); // ok
12298
id_i8(c16);
12399
//~^ ERROR mismatched types
124100
//~| expected `i8`
125101
//~| found `i16`
126-
//~| expected i8
127-
//~| found i16
128102
id_i8(c32);
129103
//~^ ERROR mismatched types
130104
//~| expected `i8`
131105
//~| found `i32`
132-
//~| expected i8
133-
//~| found i32
134106
id_i8(c64);
135107
//~^ ERROR mismatched types
136108
//~| expected `i8`
137109
//~| found `i64`
138-
//~| expected i8
139-
//~| found i64
140110

141111
id_i16(c8);
142112
//~^ ERROR mismatched types
143113
//~| expected `i16`
144114
//~| found `i8`
145-
//~| expected i16
146-
//~| found i8
147115
id_i16(c16); // ok
148116
id_i16(c32);
149117
//~^ ERROR mismatched types
150118
//~| expected `i16`
151119
//~| found `i32`
152-
//~| expected i16
153-
//~| found i32
154120
id_i16(c64);
155121
//~^ ERROR mismatched types
156122
//~| expected `i16`
157123
//~| found `i64`
158-
//~| expected i16
159-
//~| found i64
160124

161125
id_i32(c8);
162126
//~^ ERROR mismatched types
163127
//~| expected `i32`
164128
//~| found `i8`
165-
//~| expected i32
166-
//~| found i8
167129
id_i32(c16);
168130
//~^ ERROR mismatched types
169131
//~| expected `i32`
170132
//~| found `i16`
171-
//~| expected i32
172-
//~| found i16
173133
id_i32(c32); // ok
174134
id_i32(c64);
175135
//~^ ERROR mismatched types
176136
//~| expected `i32`
177137
//~| found `i64`
178-
//~| expected i32
179-
//~| found i64
180138

181139
id_i64(a8);
182140
//~^ ERROR mismatched types
183141
//~| expected `i64`
184142
//~| found `i8`
185-
//~| expected i64
186-
//~| found i8
187143
id_i64(a16);
188144
//~^ ERROR mismatched types
189145
//~| expected `i64`
190-
//~| found `i16`
191-
//~| expected i64
192146
//~| found i16
193147
id_i64(a32);
194148
//~^ ERROR mismatched types
195149
//~| expected `i64`
196150
//~| found `i32`
197-
//~| expected i64
198-
//~| found i32
199151
id_i64(a64); // ok
200152

201153
id_u8(b8); // ok
202154
id_u8(b16);
203155
//~^ ERROR mismatched types
204156
//~| expected `u8`
205157
//~| found `u16`
206-
//~| expected u8
207-
//~| found u16
208158
id_u8(b32);
209159
//~^ ERROR mismatched types
210160
//~| expected `u8`
211161
//~| found `u32`
212-
//~| expected u8
213-
//~| found u32
214162
id_u8(b64);
215163
//~^ ERROR mismatched types
216164
//~| expected `u8`
217165
//~| found `u64`
218-
//~| expected u8
219-
//~| found u64
220166

221167
id_u16(b8);
222168
//~^ ERROR mismatched types
223169
//~| expected `u16`
224170
//~| found `u8`
225-
//~| expected u16
226-
//~| found u8
227171
id_u16(b16); // ok
228172
id_u16(b32);
229173
//~^ ERROR mismatched types
230174
//~| expected `u16`
231175
//~| found `u32`
232-
//~| expected u16
233-
//~| found u32
234176
id_u16(b64);
235177
//~^ ERROR mismatched types
236178
//~| expected `u16`
237179
//~| found `u64`
238-
//~| expected u16
239-
//~| found u64
240180

241181
id_u32(b8);
242182
//~^ ERROR mismatched types
243183
//~| expected `u32`
244184
//~| found `u8`
245-
//~| expected u32
246-
//~| found u8
247185
id_u32(b16);
248186
//~^ ERROR mismatched types
249187
//~| expected `u32`
250188
//~| found `u16`
251-
//~| expected u32
252-
//~| found u16
253189
id_u32(b32); // ok
254190
id_u32(b64);
255191
//~^ ERROR mismatched types
256192
//~| expected `u32`
257193
//~| found `u64`
258-
//~| expected u32
259-
//~| found u64
260194

261195
id_u64(b8);
262196
//~^ ERROR mismatched types
263197
//~| expected `u64`
264198
//~| found `u8`
265-
//~| expected u64
266-
//~| found u8
267199
id_u64(b16);
268200
//~^ ERROR mismatched types
269201
//~| expected `u64`
270202
//~| found `u16`
271-
//~| expected u64
272-
//~| found u16
273203
id_u64(b32);
274204
//~^ ERROR mismatched types
275205
//~| expected `u64`
276206
//~| found `u32`
277-
//~| expected u64
278-
//~| found u32
279207
id_u64(b64); // ok
280208
}

src/test/compile-fail/issue-13359.rs

-4
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,9 @@ fn main() {
1717
//~^ ERROR mismatched types
1818
//~| expected `i16`
1919
//~| found `isize`
20-
//~| expected i16
21-
//~| found isize
2220

2321
bar(1*(1 as usize));
2422
//~^ ERROR mismatched types
2523
//~| expected `u32`
2624
//~| found `usize`
27-
//~| expected u32
28-
//~| found usize
2925
}

src/test/compile-fail/issue-3477.rs

-2
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,4 @@ fn main() {
1313
//~^ ERROR mismatched types
1414
//~| expected `char`
1515
//~| found `u8`
16-
//~| expected char
17-
//~| found u8
1816
}

src/test/compile-fail/issue-5100.rs

-2
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,4 @@ fn main() {
7171
let x: char = true; //~ ERROR mismatched types
7272
//~| expected `char`
7373
//~| found `bool`
74-
//~| expected char
75-
//~| found bool
7674
}

src/test/compile-fail/issue-8761.rs

-4
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,10 @@ enum Foo {
1313
//~^ ERROR mismatched types
1414
//~| expected `isize`
1515
//~| found `i64`
16-
//~| expected isize
17-
//~| found i64
1816
B = 2u8
1917
//~^ ERROR mismatched types
2018
//~| expected `isize`
2119
//~| found `u8`
22-
//~| expected isize
23-
//~| found u8
2420
}
2521

2622
fn main() {}

src/test/compile-fail/pattern-error-continue.rs

-2
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,4 @@ fn main() {
4242
//~^ ERROR mismatched types
4343
//~| expected `char`
4444
//~| found `bool`
45-
//~| expected char
46-
//~| found bool
4745
}

src/test/compile-fail/pptypedef.rs

-4
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,9 @@ fn main() {
1515
//~^ ERROR mismatched types
1616
//~| expected `u32`
1717
//~| found `i32`
18-
//~| expected u32
19-
//~| found i32
2018

2119
let_in(3i32, |i| { assert!(i == 3u32); });
2220
//~^ ERROR mismatched types
2321
//~| expected `i32`
2422
//~| found `u32`
25-
//~| expected i32
26-
//~| found u32
2723
}

src/test/compile-fail/repeat_count.rs

-6
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,6 @@ fn main() {
2525
//~^ ERROR mismatched types
2626
//~| expected `usize`
2727
//~| found `bool`
28-
//~| expected usize
29-
//~| found bool) [E0308]
3028
//~| ERROR expected positive integer for repeat count, found boolean [E0306]
3129
let d = [0; 0.5];
3230
//~^ ERROR mismatched types
@@ -46,15 +44,11 @@ fn main() {
4644
//~^ ERROR mismatched types
4745
//~| expected `usize`
4846
//~| found `isize`
49-
//~| expected usize
50-
//~| found isize) [E0308]
5147
//~| ERROR expected positive integer for repeat count, found negative integer [E0306]
5248
let f = [0_usize; -1_isize];
5349
//~^ ERROR mismatched types
5450
//~| expected `usize`
5551
//~| found `isize`
56-
//~| expected usize
57-
//~| found isize) [E0308]
5852
//~| ERROR expected positive integer for repeat count, found negative integer [E0306]
5953
struct G {
6054
g: (),

src/test/compile-fail/shift-various-bad-types.rs

-2
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,6 @@ fn foo(p: &Panolpy) {
3636
//~^ ERROR mismatched types
3737
//~| expected `i32`
3838
//~| found `i64`
39-
//~| expected i32
40-
//~| found i64)
4139
}
4240

4341
fn main() {

0 commit comments

Comments
 (0)