Skip to content

Commit 8ea426a

Browse files
Update E0370 to new error format
1 parent 4d5e81d commit 8ea426a

File tree

3 files changed

+54
-20
lines changed

3 files changed

+54
-20
lines changed

src/librustc_typeck/collect.rs

+6-4
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/discrim-overflow-2.rs

+24-8
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

+24-8
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)