Skip to content

Commit b16fbeb

Browse files
committed
Rollup merge of #36065 - acrrd:new_format_E0496, r=GuillaumeGomez
Update E0496 to new format Fixes #36000. Part of #35233. r? @GuillaumeGomez
2 parents 75e3bc3 + 63671c4 commit b16fbeb

7 files changed

+69
-49
lines changed

src/librustc/middle/resolve_lifetime.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -396,9 +396,9 @@ fn signal_shadowing_problem(sess: &Session, name: ast::Name, orig: Original, sha
396396
{} name that is already in scope",
397397
shadower.kind.desc(), name, orig.kind.desc()))
398398
};
399-
err.span_note(orig.span,
400-
&format!("shadowed {} `{}` declared here",
401-
orig.kind.desc(), name));
399+
err.span_label(orig.span, &"first declared here");
400+
err.span_label(shadower.span,
401+
&format!("lifetime {} already in scope", name));
402402
err.emit();
403403
}
404404

src/test/compile-fail/E0496.rs

+2
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@ struct Foo<'a> {
1313
}
1414

1515
impl<'a> Foo<'a> {
16+
//~^ NOTE first declared here
1617
fn f<'a>(x: &'a i32) { //~ ERROR E0496
18+
//~^ NOTE lifetime 'a already in scope
1719
}
1820
}
1921

src/test/compile-fail/loops-reject-duplicate-labels-2.rs

+17-16
Original file line numberDiff line numberDiff line change
@@ -19,30 +19,31 @@
1919
// https://internals.rust-lang.org/t/psa-rejecting-duplicate-loop-labels/1833
2020

2121
pub fn foo() {
22-
{ 'fl: for _ in 0..10 { break; } } //~ NOTE shadowed label `'fl` declared here
22+
{ 'fl: for _ in 0..10 { break; } } //~ NOTE first declared here
2323
{ 'fl: loop { break; } } //~ WARN label name `'fl` shadows a label name that is already in scope
24-
25-
{ 'lf: loop { break; } } //~ NOTE shadowed label `'lf` declared here
24+
//~^ NOTE lifetime 'fl already in scope
25+
{ 'lf: loop { break; } } //~ NOTE first declared here
2626
{ 'lf: for _ in 0..10 { break; } } //~ WARN label name `'lf` shadows a label name that is already in scope
27-
28-
{ 'wl: while 2 > 1 { break; } } //~ NOTE shadowed label `'wl` declared here
27+
//~^ NOTE lifetime 'lf already in scope
28+
{ 'wl: while 2 > 1 { break; } } //~ NOTE first declared here
2929
{ 'wl: loop { break; } } //~ WARN label name `'wl` shadows a label name that is already in scope
30-
31-
{ 'lw: loop { break; } } //~ NOTE shadowed label `'lw` declared here
30+
//~^ NOTE lifetime 'wl already in scope
31+
{ 'lw: loop { break; } } //~ NOTE first declared here
3232
{ 'lw: while 2 > 1 { break; } } //~ WARN label name `'lw` shadows a label name that is already in scope
33-
34-
{ 'fw: for _ in 0..10 { break; } } //~ NOTE shadowed label `'fw` declared here
33+
//~^ NOTE lifetime 'lw already in scope
34+
{ 'fw: for _ in 0..10 { break; } } //~ NOTE first declared here
3535
{ 'fw: while 2 > 1 { break; } } //~ WARN label name `'fw` shadows a label name that is already in scope
36-
37-
{ 'wf: while 2 > 1 { break; } } //~ NOTE shadowed label `'wf` declared here
36+
//~^ NOTE lifetime 'fw already in scope
37+
{ 'wf: while 2 > 1 { break; } } //~ NOTE first declared here
3838
{ 'wf: for _ in 0..10 { break; } } //~ WARN label name `'wf` shadows a label name that is already in scope
39-
40-
{ 'tl: while let Some(_) = None::<i32> { break; } } //~ NOTE shadowed label `'tl` declared here
39+
//~^ NOTE lifetime 'wf already in scope
40+
{ 'tl: while let Some(_) = None::<i32> { break; } } //~ NOTE first declared here
4141
{ 'tl: loop { break; } } //~ WARN label name `'tl` shadows a label name that is already in scope
42-
43-
{ 'lt: loop { break; } } //~ NOTE shadowed label `'lt` declared here
42+
//~^ NOTE lifetime 'tl already in scope
43+
{ 'lt: loop { break; } } //~ NOTE first declared here
4444
{ 'lt: while let Some(_) = None::<i32> { break; } }
45-
//~^ WARN label name `'lt` shadows a label name that is already in scope
45+
//~^ WARN label name `'lt` shadows a label name that is already in scope
46+
//~| NOTE lifetime 'lt already in scope
4647
}
4748

4849
#[rustc_error]

src/test/compile-fail/loops-reject-duplicate-labels.rs

+17-15
Original file line numberDiff line numberDiff line change
@@ -16,30 +16,32 @@
1616
// This is testing the exact cases that are in the issue description.
1717

1818
fn foo() {
19-
'fl: for _ in 0..10 { break; } //~ NOTE shadowed label `'fl` declared here
19+
'fl: for _ in 0..10 { break; } //~ NOTE first declared here
2020
'fl: loop { break; } //~ WARN label name `'fl` shadows a label name that is already in scope
21+
//~^ NOTE lifetime 'fl already in scope
2122

22-
'lf: loop { break; } //~ NOTE shadowed label `'lf` declared here
23+
'lf: loop { break; } //~ NOTE first declared here
2324
'lf: for _ in 0..10 { break; } //~ WARN label name `'lf` shadows a label name that is already in scope
24-
25-
'wl: while 2 > 1 { break; } //~ NOTE shadowed label `'wl` declared here
25+
//~^ NOTE lifetime 'lf already in scope
26+
'wl: while 2 > 1 { break; } //~ NOTE first declared here
2627
'wl: loop { break; } //~ WARN label name `'wl` shadows a label name that is already in scope
27-
28-
'lw: loop { break; } //~ NOTE shadowed label `'lw` declared here
28+
//~^ NOTE lifetime 'wl already in scope
29+
'lw: loop { break; } //~ NOTE first declared here
2930
'lw: while 2 > 1 { break; } //~ WARN label name `'lw` shadows a label name that is already in scope
30-
31-
'fw: for _ in 0..10 { break; } //~ NOTE shadowed label `'fw` declared here
31+
//~^ NOTE lifetime 'lw already in scope
32+
'fw: for _ in 0..10 { break; } //~ NOTE first declared here
3233
'fw: while 2 > 1 { break; } //~ WARN label name `'fw` shadows a label name that is already in scope
33-
34-
'wf: while 2 > 1 { break; } //~ NOTE shadowed label `'wf` declared here
34+
//~^ NOTE lifetime 'fw already in scope
35+
'wf: while 2 > 1 { break; } //~ NOTE first declared here
3536
'wf: for _ in 0..10 { break; } //~ WARN label name `'wf` shadows a label name that is already in scope
36-
37-
'tl: while let Some(_) = None::<i32> { break; } //~ NOTE shadowed label `'tl` declared here
37+
//~^ NOTE lifetime 'wf already in scope
38+
'tl: while let Some(_) = None::<i32> { break; } //~ NOTE first declared here
3839
'tl: loop { break; } //~ WARN label name `'tl` shadows a label name that is already in scope
39-
40-
'lt: loop { break; } //~ NOTE shadowed label `'lt` declared here
40+
//~^ NOTE lifetime 'tl already in scope
41+
'lt: loop { break; } //~ NOTE first declared here
4142
'lt: while let Some(_) = None::<i32> { break; }
42-
//~^ WARN label name `'lt` shadows a label name that is already in scope
43+
//~^ WARN label name `'lt` shadows a label name that is already in scope
44+
//~| NOTE lifetime 'lt already in scope
4345
}
4446

4547
// Note however that it is okay for the same label to be reused in

src/test/compile-fail/loops-reject-labels-shadowing-lifetimes.rs

+24-12
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,10 @@
1616
#![allow(dead_code, unused_variables)]
1717

1818
fn foo() {
19-
fn foo<'a>() { //~ NOTE shadowed lifetime `'a` declared here
19+
fn foo<'a>() { //~ NOTE first declared here
2020
'a: loop { break 'a; }
2121
//~^ WARN label name `'a` shadows a lifetime name that is already in scope
22+
//~| NOTE lifetime 'a already in scope
2223
}
2324

2425
struct Struct<'b, 'c> { _f: &'b i8, _g: &'c i8 }
@@ -40,76 +41,87 @@ fn foo() {
4041
}
4142
}
4243

43-
impl<'bad, 'c> Struct<'bad, 'c> { //~ NOTE shadowed lifetime `'bad` declared here
44+
impl<'bad, 'c> Struct<'bad, 'c> { //~ NOTE first declared here
4445
fn meth_bad(&self) {
4546
'bad: loop { break 'bad; }
4647
//~^ WARN label name `'bad` shadows a lifetime name that is already in scope
48+
//~| NOTE lifetime 'bad already in scope
4749
}
4850
}
4951

50-
impl<'b, 'bad> Struct<'b, 'bad> { //~ NOTE shadowed lifetime `'bad` declared here
52+
impl<'b, 'bad> Struct<'b, 'bad> { //~ NOTE first declared here
5153
fn meth_bad2(&self) {
5254
'bad: loop { break 'bad; }
5355
//~^ WARN label name `'bad` shadows a lifetime name that is already in scope
56+
//~| NOTE lifetime 'bad already in scope
5457
}
5558
}
5659

5760
impl<'b, 'c> Struct<'b, 'c> {
58-
fn meth_bad3<'bad>(x: &'bad i8) { //~ NOTE shadowed lifetime `'bad` declared here
61+
fn meth_bad3<'bad>(x: &'bad i8) { //~ NOTE first declared here
5962
'bad: loop { break 'bad; }
6063
//~^ WARN label name `'bad` shadows a lifetime name that is already in scope
64+
//~| NOTE lifetime 'bad already in scope
6165
}
6266

6367
fn meth_bad4<'a,'bad>(x: &'a i8, y: &'bad i8) {
64-
//~^ NOTE shadowed lifetime `'bad` declared here
68+
//~^ NOTE first declared here
6569
'bad: loop { break 'bad; }
6670
//~^ WARN label name `'bad` shadows a lifetime name that is already in scope
71+
//~| NOTE lifetime 'bad already in scope
6772
}
6873
}
6974

70-
impl <'bad, 'e> Enum<'bad, 'e> { //~ NOTE shadowed lifetime `'bad` declared here
75+
impl <'bad, 'e> Enum<'bad, 'e> { //~ NOTE first declared here
7176
fn meth_bad(&self) {
7277
'bad: loop { break 'bad; }
7378
//~^ WARN label name `'bad` shadows a lifetime name that is already in scope
79+
//~| NOTE lifetime 'bad already in scope
7480
}
7581
}
76-
impl <'d, 'bad> Enum<'d, 'bad> { //~ NOTE shadowed lifetime `'bad` declared here
82+
impl <'d, 'bad> Enum<'d, 'bad> { //~ NOTE first declared here
7783
fn meth_bad2(&self) {
7884
'bad: loop { break 'bad; }
7985
//~^ WARN label name `'bad` shadows a lifetime name that is already in scope
86+
//~| NOTE lifetime 'bad already in scope
8087
}
8188
}
8289
impl <'d, 'e> Enum<'d, 'e> {
83-
fn meth_bad3<'bad>(x: &'bad i8) { //~ NOTE shadowed lifetime `'bad` declared here
90+
fn meth_bad3<'bad>(x: &'bad i8) { //~ NOTE first declared here
8491
'bad: loop { break 'bad; }
8592
//~^ WARN label name `'bad` shadows a lifetime name that is already in scope
93+
//~| NOTE lifetime 'bad already in scope
8694
}
8795

88-
fn meth_bad4<'a,'bad>(x: &'bad i8) { //~ NOTE shadowed lifetime `'bad` declared here
96+
fn meth_bad4<'a,'bad>(x: &'bad i8) { //~ NOTE first declared here
8997
'bad: loop { break 'bad; }
9098
//~^ WARN label name `'bad` shadows a lifetime name that is already in scope
99+
//~| NOTE lifetime 'bad already in scope
91100
}
92101
}
93102

94-
trait HasDefaultMethod1<'bad> { //~ NOTE shadowed lifetime `'bad` declared here
103+
trait HasDefaultMethod1<'bad> { //~ NOTE first declared here
95104
fn meth_okay() {
96105
'c: loop { break 'c; }
97106
}
98107
fn meth_bad(&self) {
99108
'bad: loop { break 'bad; }
100109
//~^ WARN label name `'bad` shadows a lifetime name that is already in scope
110+
//~| NOTE lifetime 'bad already in scope
101111
}
102112
}
103-
trait HasDefaultMethod2<'a,'bad> { //~ NOTE shadowed lifetime `'bad` declared here
113+
trait HasDefaultMethod2<'a,'bad> { //~ NOTE first declared here
104114
fn meth_bad(&self) {
105115
'bad: loop { break 'bad; }
106116
//~^ WARN label name `'bad` shadows a lifetime name that is already in scope
117+
//~| NOTE lifetime 'bad already in scope
107118
}
108119
}
109120
trait HasDefaultMethod3<'a,'b> {
110-
fn meth_bad<'bad>(&self) { //~ NOTE shadowed lifetime `'bad` declared here
121+
fn meth_bad<'bad>(&self) { //~ NOTE first declared here
111122
'bad: loop { break 'bad; }
112123
//~^ WARN label name `'bad` shadows a lifetime name that is already in scope
124+
//~| NOTE lifetime 'bad already in scope
113125
}
114126
}
115127
}

src/test/compile-fail/loops-reject-lifetime-shadowing-label.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,10 @@ fn foo() {
2727

2828
let z = 3_i8;
2929

30-
'a: loop { //~ NOTE shadowed label `'a` declared here
30+
'a: loop { //~ NOTE first declared here
3131
let b = Box::new(|x: &i8| *x) as Box<for <'a> Fn(&'a i8) -> i8>;
3232
//~^ WARN lifetime name `'a` shadows a label name that is already in scope
33+
//~| NOTE lifetime 'a already in scope
3334
assert_eq!((*b)(&z), z);
3435
break 'a;
3536
}

src/test/compile-fail/shadowed-lifetime.rs

+4-2
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,18 @@
1313
struct Foo<'a>(&'a isize);
1414

1515
impl<'a> Foo<'a> {
16-
//~^ NOTE shadowed lifetime `'a` declared here
16+
//~^ NOTE first declared here
1717
fn shadow_in_method<'a>(&'a self) -> &'a isize {
1818
//~^ ERROR lifetime name `'a` shadows a lifetime name that is already in scope
19+
//~| NOTE lifetime 'a already in scope
1920
self.0
2021
}
2122

2223
fn shadow_in_type<'b>(&'b self) -> &'b isize {
23-
//~^ NOTE shadowed lifetime `'b` declared here
24+
//~^ NOTE first declared here
2425
let x: for<'b> fn(&'b isize) = panic!();
2526
//~^ ERROR lifetime name `'b` shadows a lifetime name that is already in scope
27+
//~| NOTE lifetime 'b already in scope
2628
self.0
2729
}
2830

0 commit comments

Comments
 (0)