Skip to content

Commit e506bfa

Browse files
authored
Rollup merge of rust-lang#36873 - GuillaumeGomez:e0035_e0036, r=jonathandturner
Update E0035, E0036 and E0370 to new error format Fixes rust-lang#35634. Fixes rust-lang#35206. Fixes rust-lang#35207. r? @jonathandturner
2 parents 2e5837a + 8ea426a commit e506bfa

File tree

6 files changed

+72
-24
lines changed

6 files changed

+72
-24
lines changed

src/librustc_typeck/check/method/confirm.rs

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -312,13 +312,25 @@ impl<'a, 'gcx, 'tcx> ConfirmContext<'a, 'gcx, 'tcx> {
312312

313313
if num_supplied_types > 0 && num_supplied_types != num_method_types {
314314
if num_method_types == 0 {
315-
span_err!(self.tcx.sess, self.span, E0035,
316-
"does not take type parameters");
315+
struct_span_err!(self.tcx.sess, self.span, E0035,
316+
"does not take type parameters")
317+
.span_label(self.span, &"called with unneeded type parameters")
318+
.emit();
317319
} else {
318-
span_err!(self.tcx.sess, self.span, E0036,
320+
struct_span_err!(self.tcx.sess, self.span, E0036,
319321
"incorrect number of type parameters given for this method: \
320322
expected {}, found {}",
321-
num_method_types, num_supplied_types);
323+
num_method_types, num_supplied_types)
324+
.span_label(self.span,
325+
&format!("Passed {} type argument{}, expected {}",
326+
num_supplied_types,
327+
if num_supplied_types != 1 {
328+
"s"
329+
} else {
330+
""
331+
},
332+
num_method_types))
333+
.emit();
322334
}
323335
supplied_method_types = vec![self.tcx.types.err; num_method_types];
324336
}

src/librustc_typeck/collect.rs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1164,10 +1164,12 @@ fn convert_enum_def<'a, 'tcx>(ccx: &CrateCtxt<'a, 'tcx>,
11641164
} else if let Some(disr) = repr_type.disr_incr(tcx, prev_disr) {
11651165
Some(disr)
11661166
} else {
1167-
span_err!(tcx.sess, v.span, E0370,
1168-
"enum discriminant overflowed on value after {}; \
1169-
set explicitly via {} = {} if that is desired outcome",
1170-
prev_disr.unwrap(), v.node.name, wrapped_disr);
1167+
struct_span_err!(tcx.sess, v.span, E0370,
1168+
"enum discriminant overflowed")
1169+
.span_label(v.span, &format!("overflowed on value after {}", prev_disr.unwrap()))
1170+
.note(&format!("explicitly set `{} = {}` if that is desired outcome",
1171+
v.node.name, wrapped_disr))
1172+
.emit();
11711173
None
11721174
}.unwrap_or(wrapped_disr);
11731175
prev_disr = Some(disr);

src/test/compile-fail/E0035.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,5 @@ impl Test {
1717
fn main() {
1818
let x = Test;
1919
x.method::<i32>(); //~ ERROR E0035
20+
//~| NOTE called with unneeded type parameters
2021
}

src/test/compile-fail/E0036.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,5 @@ fn main() {
2020
let x = Test;
2121
let v = &[0];
2222
x.method::<i32, i32>(v); //~ ERROR E0036
23+
//~| NOTE Passed 2 type arguments, expected 1
2324
}

src/test/compile-fail/discrim-overflow-2.rs

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,9 @@ fn f_i8() {
2424
enum A {
2525
Ok = i8::MAX - 1,
2626
Ok2,
27-
OhNo, //~ ERROR enum discriminant overflowed on value after 127i8; set explicitly via OhNo = -128i8 if that is desired outcome
27+
OhNo, //~ ERROR enum discriminant overflowed [E0370]
28+
//~| NOTE overflowed on value after 127i8
29+
//~| NOTE explicitly set `OhNo = -128i8` if that is desired outcome
2830
}
2931
}
3032

@@ -33,7 +35,9 @@ fn f_u8() {
3335
enum A {
3436
Ok = u8::MAX - 1,
3537
Ok2,
36-
OhNo, //~ ERROR enum discriminant overflowed on value after 255u8; set explicitly via OhNo = 0u8 if that is desired outcome
38+
OhNo, //~ ERROR enum discriminant overflowed [E0370]
39+
//~| NOTE overflowed on value after 255u8
40+
//~| NOTE explicitly set `OhNo = 0u8` if that is desired outcome
3741
}
3842
}
3943

@@ -42,7 +46,9 @@ fn f_i16() {
4246
enum A {
4347
Ok = i16::MAX - 1,
4448
Ok2,
45-
OhNo, //~ ERROR enum discriminant overflowed
49+
OhNo, //~ ERROR enum discriminant overflowed [E0370]
50+
//~| NOTE overflowed on value after 32767i16
51+
//~| NOTE explicitly set `OhNo = -32768i16` if that is desired outcome
4652
}
4753
}
4854

@@ -51,7 +57,9 @@ fn f_u16() {
5157
enum A {
5258
Ok = u16::MAX - 1,
5359
Ok2,
54-
OhNo, //~ ERROR enum discriminant overflowed
60+
OhNo, //~ ERROR enum discriminant overflowed [E0370]
61+
//~| NOTE overflowed on value after 65535u16
62+
//~| NOTE explicitly set `OhNo = 0u16` if that is desired outcome
5563
}
5664
}
5765

@@ -60,7 +68,9 @@ fn f_i32() {
6068
enum A {
6169
Ok = i32::MAX - 1,
6270
Ok2,
63-
OhNo, //~ ERROR enum discriminant overflowed
71+
OhNo, //~ ERROR enum discriminant overflowed [E0370]
72+
//~| NOTE overflowed on value after 2147483647i32
73+
//~| NOTE explicitly set `OhNo = -2147483648i32` if that is desired outcome
6474
}
6575
}
6676

@@ -69,7 +79,9 @@ fn f_u32() {
6979
enum A {
7080
Ok = u32::MAX - 1,
7181
Ok2,
72-
OhNo, //~ ERROR enum discriminant overflowed
82+
OhNo, //~ ERROR enum discriminant overflowed [E0370]
83+
//~| NOTE overflowed on value after 4294967295u32
84+
//~| NOTE explicitly set `OhNo = 0u32` if that is desired outcome
7385
}
7486
}
7587

@@ -78,7 +90,9 @@ fn f_i64() {
7890
enum A {
7991
Ok = i64::MAX - 1,
8092
Ok2,
81-
OhNo, //~ ERROR enum discriminant overflowed
93+
OhNo, //~ ERROR enum discriminant overflowed [E0370]
94+
//~| NOTE overflowed on value after 9223372036854775807i64
95+
//~| NOTE explicitly set `OhNo = -9223372036854775808i64` if that is desired outcome
8296
}
8397
}
8498

@@ -87,7 +101,9 @@ fn f_u64() {
87101
enum A {
88102
Ok = u64::MAX - 1,
89103
Ok2,
90-
OhNo, //~ ERROR enum discriminant overflowed
104+
OhNo, //~ ERROR enum discriminant overflowed [E0370]
105+
//~| NOTE overflowed on value after 18446744073709551615u64
106+
//~| NOTE explicitly set `OhNo = 0u64` if that is desired outcome
91107
}
92108
}
93109

src/test/compile-fail/discrim-overflow.rs

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@ fn f_i8() {
2222
enum A {
2323
Ok = i8::MAX - 1,
2424
Ok2,
25-
OhNo, //~ ERROR enum discriminant overflowed on value after 127i8; set explicitly via OhNo = -128i8 if that is desired outcome
25+
OhNo, //~ ERROR enum discriminant overflowed [E0370]
26+
//~| NOTE overflowed on value after 127i8
27+
//~| NOTE explicitly set `OhNo = -128i8` if that is desired outcome
2628
}
2729

2830
let x = A::Ok;
@@ -33,7 +35,9 @@ fn f_u8() {
3335
enum A {
3436
Ok = u8::MAX - 1,
3537
Ok2,
36-
OhNo, //~ ERROR enum discriminant overflowed on value after 255u8; set explicitly via OhNo = 0u8 if that is desired outcome
38+
OhNo, //~ ERROR enum discriminant overflowed [E0370]
39+
//~| NOTE overflowed on value after 255u8
40+
//~| NOTE explicitly set `OhNo = 0u8` if that is desired outcome
3741
}
3842

3943
let x = A::Ok;
@@ -44,7 +48,9 @@ fn f_i16() {
4448
enum A {
4549
Ok = i16::MAX - 1,
4650
Ok2,
47-
OhNo, //~ ERROR enum discriminant overflowed
51+
OhNo, //~ ERROR enum discriminant overflowed [E0370]
52+
//~| NOTE overflowed on value after 32767i16
53+
//~| NOTE explicitly set `OhNo = -32768i16` if that is desired outcome
4854
}
4955

5056
let x = A::Ok;
@@ -55,7 +61,9 @@ fn f_u16() {
5561
enum A {
5662
Ok = u16::MAX - 1,
5763
Ok2,
58-
OhNo, //~ ERROR enum discriminant overflowed
64+
OhNo, //~ ERROR enum discriminant overflowed [E0370]
65+
//~| overflowed on value after 65535u16
66+
//~| NOTE explicitly set `OhNo = 0u16` if that is desired outcome
5967
}
6068

6169
let x = A::Ok;
@@ -66,7 +74,9 @@ fn f_i32() {
6674
enum A {
6775
Ok = i32::MAX - 1,
6876
Ok2,
69-
OhNo, //~ ERROR enum discriminant overflowed
77+
OhNo, //~ ERROR enum discriminant overflowed [E0370]
78+
//~| overflowed on value after 2147483647i32
79+
//~| NOTE explicitly set `OhNo = -2147483648i32` if that is desired outcome
7080
}
7181

7282
let x = A::Ok;
@@ -77,7 +87,9 @@ fn f_u32() {
7787
enum A {
7888
Ok = u32::MAX - 1,
7989
Ok2,
80-
OhNo, //~ ERROR enum discriminant overflowed
90+
OhNo, //~ ERROR enum discriminant overflowed [E0370]
91+
//~| overflowed on value after 4294967295u32
92+
//~| NOTE explicitly set `OhNo = 0u32` if that is desired outcome
8193
}
8294

8395
let x = A::Ok;
@@ -88,7 +100,9 @@ fn f_i64() {
88100
enum A {
89101
Ok = i64::MAX - 1,
90102
Ok2,
91-
OhNo, //~ ERROR enum discriminant overflowed
103+
OhNo, //~ ERROR enum discriminant overflowed [E0370]
104+
//~| overflowed on value after 9223372036854775807i64
105+
//~| NOTE explicitly set `OhNo = -9223372036854775808i64` if that is desired outcome
92106
}
93107

94108
let x = A::Ok;
@@ -99,7 +113,9 @@ fn f_u64() {
99113
enum A {
100114
Ok = u64::MAX - 1,
101115
Ok2,
102-
OhNo, //~ ERROR enum discriminant overflowed
116+
OhNo, //~ ERROR enum discriminant overflowed [E0370]
117+
//~| overflowed on value after 18446744073709551615u64
118+
//~| NOTE explicitly set `OhNo = 0u64` if that is desired outcome
103119
}
104120

105121
let x = A::Ok;

0 commit comments

Comments
 (0)