Skip to content

Commit 251ca71

Browse files
authoredMay 4, 2021
Rollup merge of rust-lang#83004 - sunjay:field-never-read-issue-81658, r=pnkfelix
Improve diagnostic for when field is never read Related to (but does not close) rust-lang#81658 This completes the first step of ``@pnkfelix's`` [mentoring instructions](rust-lang#81658 (comment)) but does not actually improve the diagnostics (yet!). The two tests are heavily reduced versions of code from the original bug report. I've confirmed that the reduced `field-used-in-ffi` test [fails on nightly](https://play.rust-lang.org/?version=nightly&mode=debug&edition=2018&gist=f0862c89ddca028c55c20a5ed05e679a) but [passes on stable](https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=f0862c89ddca028c55c20a5ed05e679a). This confirms that the regression is reproduced correctly. The `drop-only-field` test is a case that ``@pnkfelix`` mentioned in his mentoring instructions. It is not a regression, but will come in handy when we make the diagnostic smarter by looking at whether the field type implements `Drop`. Per the [rustc-dev-guide](https://rustc-dev-guide.rust-lang.org/tests/adding.html), each test includes a comment summarizing what it is about.
2 parents 7a0f178 + 0ba2c6a commit 251ca71

31 files changed

+429
-81
lines changed
 

‎compiler/rustc_passes/src/dead.rs

+52-9
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
// from live codes are live, and everything else is dead.
44

55
use rustc_data_structures::fx::{FxHashMap, FxHashSet};
6+
use rustc_errors::Applicability;
67
use rustc_hir as hir;
78
use rustc_hir::def::{CtorOf, DefKind, Res};
89
use rustc_hir::def_id::{DefId, LOCAL_CRATE};
@@ -15,7 +16,7 @@ use rustc_middle::middle::privacy;
1516
use rustc_middle::ty::{self, DefIdTree, TyCtxt};
1617
use rustc_session::lint;
1718

18-
use rustc_span::symbol::{sym, Symbol};
19+
use rustc_span::symbol::{sym, Ident, Symbol};
1920

2021
// Any local node that may call something in its body block should be
2122
// explored. For example, if it's a live Node::Item that is a
@@ -507,6 +508,13 @@ fn find_live<'tcx>(
507508
symbol_visitor.live_symbols
508509
}
509510

511+
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
512+
enum ExtraNote {
513+
/// Use this to provide some examples in the diagnostic of potential other purposes for a value
514+
/// or field that is dead code
515+
OtherPurposeExamples,
516+
}
517+
510518
struct DeadVisitor<'tcx> {
511519
tcx: TyCtxt<'tcx>,
512520
live_symbols: FxHashSet<hir::HirId>,
@@ -572,14 +580,42 @@ impl DeadVisitor<'tcx> {
572580
&mut self,
573581
id: hir::HirId,
574582
span: rustc_span::Span,
575-
name: Symbol,
583+
name: Ident,
576584
participle: &str,
585+
extra_note: Option<ExtraNote>,
577586
) {
578587
if !name.as_str().starts_with('_') {
579588
self.tcx.struct_span_lint_hir(lint::builtin::DEAD_CODE, id, span, |lint| {
580589
let def_id = self.tcx.hir().local_def_id(id);
581590
let descr = self.tcx.def_kind(def_id).descr(def_id.to_def_id());
582-
lint.build(&format!("{} is never {}: `{}`", descr, participle, name)).emit()
591+
592+
let prefixed = vec![(name.span, format!("_{}", name))];
593+
594+
let mut diag =
595+
lint.build(&format!("{} is never {}: `{}`", descr, participle, name));
596+
597+
diag.multipart_suggestion(
598+
"if this is intentional, prefix it with an underscore",
599+
prefixed,
600+
Applicability::MachineApplicable,
601+
);
602+
603+
let mut note = format!(
604+
"the leading underscore signals that this {} serves some other \
605+
purpose even if it isn't used in a way that we can detect.",
606+
descr,
607+
);
608+
if matches!(extra_note, Some(ExtraNote::OtherPurposeExamples)) {
609+
note += " (e.g. for its effect when dropped or in foreign code)";
610+
}
611+
612+
diag.note(&note);
613+
614+
// Force the note we added to the front, before any other subdiagnostics
615+
// added in lint.build(...)
616+
diag.children.rotate_right(1);
617+
618+
diag.emit()
583619
});
584620
}
585621
}
@@ -625,7 +661,7 @@ impl Visitor<'tcx> for DeadVisitor<'tcx> {
625661
hir::ItemKind::Struct(..) => "constructed", // Issue #52325
626662
_ => "used",
627663
};
628-
self.warn_dead_code(item.hir_id(), span, item.ident.name, participle);
664+
self.warn_dead_code(item.hir_id(), span, item.ident, participle, None);
629665
} else {
630666
// Only continue if we didn't warn
631667
intravisit::walk_item(self, item);
@@ -639,22 +675,28 @@ impl Visitor<'tcx> for DeadVisitor<'tcx> {
639675
id: hir::HirId,
640676
) {
641677
if self.should_warn_about_variant(&variant) {
642-
self.warn_dead_code(variant.id, variant.span, variant.ident.name, "constructed");
678+
self.warn_dead_code(variant.id, variant.span, variant.ident, "constructed", None);
643679
} else {
644680
intravisit::walk_variant(self, variant, g, id);
645681
}
646682
}
647683

648684
fn visit_foreign_item(&mut self, fi: &'tcx hir::ForeignItem<'tcx>) {
649685
if self.should_warn_about_foreign_item(fi) {
650-
self.warn_dead_code(fi.hir_id(), fi.span, fi.ident.name, "used");
686+
self.warn_dead_code(fi.hir_id(), fi.span, fi.ident, "used", None);
651687
}
652688
intravisit::walk_foreign_item(self, fi);
653689
}
654690

655691
fn visit_field_def(&mut self, field: &'tcx hir::FieldDef<'tcx>) {
656692
if self.should_warn_about_field(&field) {
657-
self.warn_dead_code(field.hir_id, field.span, field.ident.name, "read");
693+
self.warn_dead_code(
694+
field.hir_id,
695+
field.span,
696+
field.ident,
697+
"read",
698+
Some(ExtraNote::OtherPurposeExamples),
699+
);
658700
}
659701
intravisit::walk_field_def(self, field);
660702
}
@@ -666,8 +708,9 @@ impl Visitor<'tcx> for DeadVisitor<'tcx> {
666708
self.warn_dead_code(
667709
impl_item.hir_id(),
668710
impl_item.span,
669-
impl_item.ident.name,
711+
impl_item.ident,
670712
"used",
713+
None,
671714
);
672715
}
673716
self.visit_nested_body(body_id)
@@ -685,7 +728,7 @@ impl Visitor<'tcx> for DeadVisitor<'tcx> {
685728
} else {
686729
impl_item.ident.span
687730
};
688-
self.warn_dead_code(impl_item.hir_id(), span, impl_item.ident.name, "used");
731+
self.warn_dead_code(impl_item.hir_id(), span, impl_item.ident, "used", None);
689732
}
690733
self.visit_nested_body(body_id)
691734
}

‎src/test/ui/associated-consts/associated-const-dead-code.stderr

+4-1
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@ error: associated constant is never used: `BAR`
22
--> $DIR/associated-const-dead-code.rs:6:5
33
|
44
LL | const BAR: u32 = 1;
5-
| ^^^^^^^^^^^^^^^^^^^
5+
| ^^^^^^---^^^^^^^^^^
6+
| |
7+
| help: if this is intentional, prefix it with an underscore: `_BAR`
68
|
9+
= note: the leading underscore signals that this associated constant serves some other purpose even if it isn't used in a way that we can detect.
710
note: the lint level is defined here
811
--> $DIR/associated-const-dead-code.rs:1:9
912
|

‎src/test/ui/derive-uninhabited-enum-38885.stderr

+4-1
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@ warning: variant is never constructed: `Void`
22
--> $DIR/derive-uninhabited-enum-38885.rs:13:5
33
|
44
LL | Void(Void),
5-
| ^^^^^^^^^^
5+
| ----^^^^^^
6+
| |
7+
| help: if this is intentional, prefix it with an underscore: `_Void`
68
|
9+
= note: the leading underscore signals that this variant serves some other purpose even if it isn't used in a way that we can detect.
710
= note: `-W dead-code` implied by `-W unused`
811

912
warning: 1 warning emitted

‎src/test/ui/issues/issue-37515.stderr

+4-1
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@ warning: type alias is never used: `Z`
22
--> $DIR/issue-37515.rs:5:1
33
|
44
LL | type Z = dyn for<'x> Send;
5-
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
5+
| ^^^^^-^^^^^^^^^^^^^^^^^^^^
6+
| |
7+
| help: if this is intentional, prefix it with an underscore: `_Z`
68
|
9+
= note: the leading underscore signals that this type alias serves some other purpose even if it isn't used in a way that we can detect.
710
note: the lint level is defined here
811
--> $DIR/issue-37515.rs:3:9
912
|

‎src/test/ui/lint/dead-code/basic.stderr

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@ error: function is never used: `foo`
22
--> $DIR/basic.rs:4:4
33
|
44
LL | fn foo() {
5-
| ^^^
5+
| ^^^ help: if this is intentional, prefix it with an underscore: `_foo`
66
|
7+
= note: the leading underscore signals that this function serves some other purpose even if it isn't used in a way that we can detect.
78
note: the lint level is defined here
89
--> $DIR/basic.rs:1:9
910
|

‎src/test/ui/lint/dead-code/const-and-self.stderr

+5-2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@ warning: variant is never constructed: `B`
22
--> $DIR/const-and-self.rs:33:5
33
|
44
LL | B,
5-
| ^
5+
| ^ help: if this is intentional, prefix it with an underscore: `_B`
66
|
7+
= note: the leading underscore signals that this variant serves some other purpose even if it isn't used in a way that we can detect.
78
note: the lint level is defined here
89
--> $DIR/const-and-self.rs:3:9
910
|
@@ -14,7 +15,9 @@ warning: variant is never constructed: `C`
1415
--> $DIR/const-and-self.rs:34:5
1516
|
1617
LL | C,
17-
| ^
18+
| ^ help: if this is intentional, prefix it with an underscore: `_C`
19+
|
20+
= note: the leading underscore signals that this variant serves some other purpose even if it isn't used in a way that we can detect.
1821

1922
warning: 2 warnings emitted
2023

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
//! The field `guard` is never used directly, but it is still useful for its side effect when
2+
//! dropped. Since rustc doesn't consider a `Drop` impl as a use, we want to make sure we at least
3+
//! produce a helpful diagnostic that points the user to what they can do if they indeed intended to
4+
//! have a field that is only used for its `Drop` side effect.
5+
//!
6+
//! Issue: https://github.com/rust-lang/rust/issues/81658
7+
8+
#![deny(dead_code)]
9+
10+
use std::sync::{Mutex, MutexGuard};
11+
12+
/// Holds a locked value until it is dropped
13+
pub struct Locked<'a, T> {
14+
// Field is kept for its affect when dropped, but otherwise unused
15+
guard: MutexGuard<'a, T>, //~ ERROR field is never read
16+
}
17+
18+
impl<'a, T> Locked<'a, T> {
19+
pub fn new(value: &'a Mutex<T>) -> Self {
20+
Self {
21+
guard: value.lock().unwrap(),
22+
}
23+
}
24+
}
25+
26+
fn main() {
27+
let items = Mutex::new(vec![1, 2, 3]);
28+
29+
// Hold a lock on items while doing something else
30+
let result = {
31+
// The lock will be released at the end of this scope
32+
let _lock = Locked::new(&items);
33+
34+
do_something_else()
35+
};
36+
37+
println!("{}", result);
38+
}
39+
40+
fn do_something_else() -> i32 {
41+
1 + 1
42+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
error: field is never read: `guard`
2+
--> $DIR/drop-only-field-issue-81658.rs:15:5
3+
|
4+
LL | guard: MutexGuard<'a, T>,
5+
| -----^^^^^^^^^^^^^^^^^^^
6+
| |
7+
| help: if this is intentional, prefix it with an underscore: `_guard`
8+
|
9+
= note: the leading underscore signals that this field serves some other purpose even if it isn't used in a way that we can detect. (e.g. for its effect when dropped or in foreign code)
10+
note: the lint level is defined here
11+
--> $DIR/drop-only-field-issue-81658.rs:8:9
12+
|
13+
LL | #![deny(dead_code)]
14+
| ^^^^^^^^^
15+
16+
error: aborting due to previous error
17+

‎src/test/ui/lint/dead-code/empty-unused-enum.stderr

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@ error: enum is never used: `E`
22
--> $DIR/empty-unused-enum.rs:3:6
33
|
44
LL | enum E {}
5-
| ^
5+
| ^ help: if this is intentional, prefix it with an underscore: `_E`
66
|
7+
= note: the leading underscore signals that this enum serves some other purpose even if it isn't used in a way that we can detect.
78
note: the lint level is defined here
89
--> $DIR/empty-unused-enum.rs:1:9
910
|
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
//! The field `items` is being "used" by FFI (implicitly through pointers). However, since rustc
2+
//! doesn't know how to detect that, we produce a message that says the field is unused. This can
3+
//! cause some confusion and we want to make sure our diagnostics help as much as they can.
4+
//!
5+
//! Issue: https://github.com/rust-lang/rust/issues/81658
6+
7+
#![deny(dead_code)]
8+
9+
/// A struct for holding on to data while it is being used in our FFI code
10+
pub struct FFIData<T> {
11+
/// These values cannot be dropped while the pointers to each item
12+
/// are still in use
13+
items: Option<Vec<T>>, //~ ERROR field is never read
14+
}
15+
16+
impl<T> FFIData<T> {
17+
pub fn new() -> Self {
18+
Self {items: None}
19+
}
20+
21+
/// Load items into this type and return pointers to each item that can
22+
/// be passed to FFI
23+
pub fn load(&mut self, items: Vec<T>) -> Vec<*const T> {
24+
let ptrs = items.iter().map(|item| item as *const _).collect();
25+
26+
self.items = Some(items);
27+
28+
ptrs
29+
}
30+
}
31+
32+
extern {
33+
/// The FFI code that uses items
34+
fn process_item(item: *const i32);
35+
}
36+
37+
fn main() {
38+
// Data cannot be dropped until the end of this scope or else the items
39+
// will be dropped before they are processed
40+
let mut data = FFIData::new();
41+
42+
let ptrs = data.load(vec![1, 2, 3, 4, 5]);
43+
44+
for ptr in ptrs {
45+
// Safety: This pointer is valid as long as the arena is in scope
46+
unsafe { process_item(ptr); }
47+
}
48+
49+
// Items will be safely freed at the end of this scope
50+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
error: field is never read: `items`
2+
--> $DIR/field-used-in-ffi-issue-81658.rs:13:5
3+
|
4+
LL | items: Option<Vec<T>>,
5+
| -----^^^^^^^^^^^^^^^^
6+
| |
7+
| help: if this is intentional, prefix it with an underscore: `_items`
8+
|
9+
= note: the leading underscore signals that this field serves some other purpose even if it isn't used in a way that we can detect. (e.g. for its effect when dropped or in foreign code)
10+
note: the lint level is defined here
11+
--> $DIR/field-used-in-ffi-issue-81658.rs:7:9
12+
|
13+
LL | #![deny(dead_code)]
14+
| ^^^^^^^^^
15+
16+
error: aborting due to previous error
17+

‎src/test/ui/lint/dead-code/impl-trait.stderr

+4-1
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@ error: type alias is never used: `Unused`
22
--> $DIR/impl-trait.rs:12:1
33
|
44
LL | type Unused = ();
5-
| ^^^^^^^^^^^^^^^^^
5+
| ^^^^^------^^^^^^
6+
| |
7+
| help: if this is intentional, prefix it with an underscore: `_Unused`
68
|
9+
= note: the leading underscore signals that this type alias serves some other purpose even if it isn't used in a way that we can detect.
710
note: the lint level is defined here
811
--> $DIR/impl-trait.rs:1:9
912
|

‎src/test/ui/lint/dead-code/lint-dead-code-1.stderr

+33-10
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@ error: struct is never constructed: `Bar`
22
--> $DIR/lint-dead-code-1.rs:12:16
33
|
44
LL | pub struct Bar;
5-
| ^^^
5+
| ^^^ help: if this is intentional, prefix it with an underscore: `_Bar`
66
|
7+
= note: the leading underscore signals that this struct serves some other purpose even if it isn't used in a way that we can detect.
78
note: the lint level is defined here
89
--> $DIR/lint-dead-code-1.rs:5:9
910
|
@@ -14,55 +15,77 @@ error: static is never used: `priv_static`
1415
--> $DIR/lint-dead-code-1.rs:20:1
1516
|
1617
LL | static priv_static: isize = 0;
17-
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
18+
| ^^^^^^^-----------^^^^^^^^^^^^
19+
| |
20+
| help: if this is intentional, prefix it with an underscore: `_priv_static`
21+
|
22+
= note: the leading underscore signals that this static serves some other purpose even if it isn't used in a way that we can detect.
1823

1924
error: constant is never used: `priv_const`
2025
--> $DIR/lint-dead-code-1.rs:27:1
2126
|
2227
LL | const priv_const: isize = 0;
23-
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
28+
| ^^^^^^----------^^^^^^^^^^^^
29+
| |
30+
| help: if this is intentional, prefix it with an underscore: `_priv_const`
31+
|
32+
= note: the leading underscore signals that this constant serves some other purpose even if it isn't used in a way that we can detect.
2433

2534
error: struct is never constructed: `PrivStruct`
2635
--> $DIR/lint-dead-code-1.rs:35:8
2736
|
2837
LL | struct PrivStruct;
29-
| ^^^^^^^^^^
38+
| ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_PrivStruct`
39+
|
40+
= note: the leading underscore signals that this struct serves some other purpose even if it isn't used in a way that we can detect.
3041

3142
error: enum is never used: `priv_enum`
3243
--> $DIR/lint-dead-code-1.rs:64:6
3344
|
3445
LL | enum priv_enum { foo2, bar2 }
35-
| ^^^^^^^^^
46+
| ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_priv_enum`
47+
|
48+
= note: the leading underscore signals that this enum serves some other purpose even if it isn't used in a way that we can detect.
3649

3750
error: variant is never constructed: `bar3`
3851
--> $DIR/lint-dead-code-1.rs:67:5
3952
|
4053
LL | bar3
41-
| ^^^^
54+
| ^^^^ help: if this is intentional, prefix it with an underscore: `_bar3`
55+
|
56+
= note: the leading underscore signals that this variant serves some other purpose even if it isn't used in a way that we can detect.
4257

4358
error: function is never used: `priv_fn`
4459
--> $DIR/lint-dead-code-1.rs:88:4
4560
|
4661
LL | fn priv_fn() {
47-
| ^^^^^^^
62+
| ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_priv_fn`
63+
|
64+
= note: the leading underscore signals that this function serves some other purpose even if it isn't used in a way that we can detect.
4865

4966
error: function is never used: `foo`
5067
--> $DIR/lint-dead-code-1.rs:93:4
5168
|
5269
LL | fn foo() {
53-
| ^^^
70+
| ^^^ help: if this is intentional, prefix it with an underscore: `_foo`
71+
|
72+
= note: the leading underscore signals that this function serves some other purpose even if it isn't used in a way that we can detect.
5473

5574
error: function is never used: `bar`
5675
--> $DIR/lint-dead-code-1.rs:98:4
5776
|
5877
LL | fn bar() {
59-
| ^^^
78+
| ^^^ help: if this is intentional, prefix it with an underscore: `_bar`
79+
|
80+
= note: the leading underscore signals that this function serves some other purpose even if it isn't used in a way that we can detect.
6081

6182
error: function is never used: `baz`
6283
--> $DIR/lint-dead-code-1.rs:102:4
6384
|
6485
LL | fn baz() -> impl Copy {
65-
| ^^^
86+
| ^^^ help: if this is intentional, prefix it with an underscore: `_baz`
87+
|
88+
= note: the leading underscore signals that this function serves some other purpose even if it isn't used in a way that we can detect.
6689

6790
error: aborting due to 10 previous errors
6891

‎src/test/ui/lint/dead-code/lint-dead-code-2.stderr

+8-3
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@ error: function is never used: `dead_fn`
22
--> $DIR/lint-dead-code-2.rs:22:4
33
|
44
LL | fn dead_fn() {}
5-
| ^^^^^^^
5+
| ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_dead_fn`
66
|
7+
= note: the leading underscore signals that this function serves some other purpose even if it isn't used in a way that we can detect.
78
note: the lint level is defined here
89
--> $DIR/lint-dead-code-2.rs:2:9
910
|
@@ -14,13 +15,17 @@ error: function is never used: `dead_fn2`
1415
--> $DIR/lint-dead-code-2.rs:25:4
1516
|
1617
LL | fn dead_fn2() {}
17-
| ^^^^^^^^
18+
| ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_dead_fn2`
19+
|
20+
= note: the leading underscore signals that this function serves some other purpose even if it isn't used in a way that we can detect.
1821

1922
error: function is never used: `main`
2023
--> $DIR/lint-dead-code-2.rs:38:4
2124
|
2225
LL | fn main() {
23-
| ^^^^
26+
| ^^^^ help: if this is intentional, prefix it with an underscore: `_main`
27+
|
28+
= note: the leading underscore signals that this function serves some other purpose even if it isn't used in a way that we can detect.
2429

2530
error: aborting due to 3 previous errors
2631

‎src/test/ui/lint/dead-code/lint-dead-code-3.stderr

+16-5
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@ error: struct is never constructed: `Foo`
22
--> $DIR/lint-dead-code-3.rs:14:8
33
|
44
LL | struct Foo;
5-
| ^^^
5+
| ^^^ help: if this is intentional, prefix it with an underscore: `_Foo`
66
|
7+
= note: the leading underscore signals that this struct serves some other purpose even if it isn't used in a way that we can detect.
78
note: the lint level is defined here
89
--> $DIR/lint-dead-code-3.rs:4:9
910
|
@@ -14,25 +15,35 @@ error: associated function is never used: `foo`
1415
--> $DIR/lint-dead-code-3.rs:16:8
1516
|
1617
LL | fn foo(&self) {
17-
| ^^^
18+
| ^^^ help: if this is intentional, prefix it with an underscore: `_foo`
19+
|
20+
= note: the leading underscore signals that this associated function serves some other purpose even if it isn't used in a way that we can detect.
1821

1922
error: function is never used: `bar`
2023
--> $DIR/lint-dead-code-3.rs:21:4
2124
|
2225
LL | fn bar() {
23-
| ^^^
26+
| ^^^ help: if this is intentional, prefix it with an underscore: `_bar`
27+
|
28+
= note: the leading underscore signals that this function serves some other purpose even if it isn't used in a way that we can detect.
2429

2530
error: enum is never used: `c_void`
2631
--> $DIR/lint-dead-code-3.rs:60:6
2732
|
2833
LL | enum c_void {}
29-
| ^^^^^^
34+
| ^^^^^^ help: if this is intentional, prefix it with an underscore: `_c_void`
35+
|
36+
= note: the leading underscore signals that this enum serves some other purpose even if it isn't used in a way that we can detect.
3037

3138
error: function is never used: `free`
3239
--> $DIR/lint-dead-code-3.rs:62:5
3340
|
3441
LL | fn free(p: *const c_void);
35-
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
42+
| ^^^----^^^^^^^^^^^^^^^^^^^
43+
| |
44+
| help: if this is intentional, prefix it with an underscore: `_free`
45+
|
46+
= note: the leading underscore signals that this function serves some other purpose even if it isn't used in a way that we can detect.
3647

3748
error: aborting due to 5 previous errors
3849

‎src/test/ui/lint/dead-code/lint-dead-code-4.stderr

+42-10
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@ error: field is never read: `b`
22
--> $DIR/lint-dead-code-4.rs:7:5
33
|
44
LL | b: bool,
5-
| ^^^^^^^
5+
| -^^^^^^
6+
| |
7+
| help: if this is intentional, prefix it with an underscore: `_b`
68
|
9+
= note: the leading underscore signals that this field serves some other purpose even if it isn't used in a way that we can detect. (e.g. for its effect when dropped or in foreign code)
710
note: the lint level is defined here
811
--> $DIR/lint-dead-code-4.rs:3:9
912
|
@@ -14,59 +17,88 @@ error: variant is never constructed: `X`
1417
--> $DIR/lint-dead-code-4.rs:15:5
1518
|
1619
LL | X,
17-
| ^
20+
| ^ help: if this is intentional, prefix it with an underscore: `_X`
21+
|
22+
= note: the leading underscore signals that this variant serves some other purpose even if it isn't used in a way that we can detect.
1823

1924
error: variant is never constructed: `Y`
2025
--> $DIR/lint-dead-code-4.rs:16:5
2126
|
22-
LL | / Y {
27+
LL | Y {
28+
| ^ help: if this is intentional, prefix it with an underscore: `_Y`
29+
| _____|
30+
| |
2331
LL | | a: String,
2432
LL | | b: i32,
2533
LL | | c: i32,
2634
LL | | },
2735
| |_____^
36+
|
37+
= note: the leading underscore signals that this variant serves some other purpose even if it isn't used in a way that we can detect.
2838

2939
error: enum is never used: `ABC`
3040
--> $DIR/lint-dead-code-4.rs:24:6
3141
|
3242
LL | enum ABC {
33-
| ^^^
43+
| ^^^ help: if this is intentional, prefix it with an underscore: `_ABC`
44+
|
45+
= note: the leading underscore signals that this enum serves some other purpose even if it isn't used in a way that we can detect.
3446

3547
error: variant is never constructed: `I`
3648
--> $DIR/lint-dead-code-4.rs:36:5
3749
|
3850
LL | I,
39-
| ^
51+
| ^ help: if this is intentional, prefix it with an underscore: `_I`
52+
|
53+
= note: the leading underscore signals that this variant serves some other purpose even if it isn't used in a way that we can detect.
4054

4155
error: field is never read: `b`
4256
--> $DIR/lint-dead-code-4.rs:39:9
4357
|
4458
LL | b: i32,
45-
| ^^^^^^
59+
| -^^^^^
60+
| |
61+
| help: if this is intentional, prefix it with an underscore: `_b`
62+
|
63+
= note: the leading underscore signals that this field serves some other purpose even if it isn't used in a way that we can detect. (e.g. for its effect when dropped or in foreign code)
4664

4765
error: field is never read: `c`
4866
--> $DIR/lint-dead-code-4.rs:40:9
4967
|
5068
LL | c: i32,
51-
| ^^^^^^
69+
| -^^^^^
70+
| |
71+
| help: if this is intentional, prefix it with an underscore: `_c`
72+
|
73+
= note: the leading underscore signals that this field serves some other purpose even if it isn't used in a way that we can detect. (e.g. for its effect when dropped or in foreign code)
5274

5375
error: variant is never constructed: `K`
5476
--> $DIR/lint-dead-code-4.rs:42:5
5577
|
5678
LL | K
57-
| ^
79+
| ^ help: if this is intentional, prefix it with an underscore: `_K`
80+
|
81+
= note: the leading underscore signals that this variant serves some other purpose even if it isn't used in a way that we can detect.
5882

5983
error: field is never read: `x`
6084
--> $DIR/lint-dead-code-4.rs:61:5
6185
|
6286
LL | x: usize,
63-
| ^^^^^^^^
87+
| -^^^^^^^
88+
| |
89+
| help: if this is intentional, prefix it with an underscore: `_x`
90+
|
91+
= note: the leading underscore signals that this field serves some other purpose even if it isn't used in a way that we can detect. (e.g. for its effect when dropped or in foreign code)
6492

6593
error: field is never read: `c`
6694
--> $DIR/lint-dead-code-4.rs:63:5
6795
|
6896
LL | c: bool,
69-
| ^^^^^^^
97+
| -^^^^^^
98+
| |
99+
| help: if this is intentional, prefix it with an underscore: `_c`
100+
|
101+
= note: the leading underscore signals that this field serves some other purpose even if it isn't used in a way that we can detect. (e.g. for its effect when dropped or in foreign code)
70102

71103
error: aborting due to 10 previous errors
72104

‎src/test/ui/lint/dead-code/lint-dead-code-5.stderr

+15-4
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@ error: variant is never constructed: `Variant2`
22
--> $DIR/lint-dead-code-5.rs:6:5
33
|
44
LL | Variant2
5-
| ^^^^^^^^
5+
| ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_Variant2`
66
|
7+
= note: the leading underscore signals that this variant serves some other purpose even if it isn't used in a way that we can detect.
78
note: the lint level is defined here
89
--> $DIR/lint-dead-code-5.rs:2:9
910
|
@@ -14,19 +15,29 @@ error: variant is never constructed: `Variant5`
1415
--> $DIR/lint-dead-code-5.rs:13:5
1516
|
1617
LL | Variant5 { _x: isize },
17-
| ^^^^^^^^^^^^^^^^^^^^^^
18+
| --------^^^^^^^^^^^^^^
19+
| |
20+
| help: if this is intentional, prefix it with an underscore: `_Variant5`
21+
|
22+
= note: the leading underscore signals that this variant serves some other purpose even if it isn't used in a way that we can detect.
1823

1924
error: variant is never constructed: `Variant6`
2025
--> $DIR/lint-dead-code-5.rs:14:5
2126
|
2227
LL | Variant6(isize),
23-
| ^^^^^^^^^^^^^^^
28+
| --------^^^^^^^
29+
| |
30+
| help: if this is intentional, prefix it with an underscore: `_Variant6`
31+
|
32+
= note: the leading underscore signals that this variant serves some other purpose even if it isn't used in a way that we can detect.
2433

2534
error: enum is never used: `Enum3`
2635
--> $DIR/lint-dead-code-5.rs:35:6
2736
|
2837
LL | enum Enum3 {
29-
| ^^^^^
38+
| ^^^^^ help: if this is intentional, prefix it with an underscore: `_Enum3`
39+
|
40+
= note: the leading underscore signals that this enum serves some other purpose even if it isn't used in a way that we can detect.
3041

3142
error: aborting due to 4 previous errors
3243

‎src/test/ui/lint/dead-code/lint-dead-code-6.stderr

+11-4
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@ error: struct is never constructed: `UnusedStruct`
22
--> $DIR/lint-dead-code-6.rs:3:8
33
|
44
LL | struct UnusedStruct;
5-
| ^^^^^^^^^^^^
5+
| ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_UnusedStruct`
66
|
7+
= note: the leading underscore signals that this struct serves some other purpose even if it isn't used in a way that we can detect.
78
note: the lint level is defined here
89
--> $DIR/lint-dead-code-6.rs:1:9
910
|
@@ -14,19 +15,25 @@ error: associated function is never used: `unused_impl_fn_1`
1415
--> $DIR/lint-dead-code-6.rs:5:8
1516
|
1617
LL | fn unused_impl_fn_1() {
17-
| ^^^^^^^^^^^^^^^^
18+
| ^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_unused_impl_fn_1`
19+
|
20+
= note: the leading underscore signals that this associated function serves some other purpose even if it isn't used in a way that we can detect.
1821

1922
error: associated function is never used: `unused_impl_fn_2`
2023
--> $DIR/lint-dead-code-6.rs:9:8
2124
|
2225
LL | fn unused_impl_fn_2(var: i32) {
23-
| ^^^^^^^^^^^^^^^^
26+
| ^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_unused_impl_fn_2`
27+
|
28+
= note: the leading underscore signals that this associated function serves some other purpose even if it isn't used in a way that we can detect.
2429

2530
error: associated function is never used: `unused_impl_fn_3`
2631
--> $DIR/lint-dead-code-6.rs:13:8
2732
|
2833
LL | fn unused_impl_fn_3(
29-
| ^^^^^^^^^^^^^^^^
34+
| ^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_unused_impl_fn_3`
35+
|
36+
= note: the leading underscore signals that this associated function serves some other purpose even if it isn't used in a way that we can detect.
3037

3138
error: aborting due to 4 previous errors
3239

‎src/test/ui/lint/dead-code/newline-span.stderr

+8-3
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@ error: function is never used: `unused`
22
--> $DIR/newline-span.rs:3:4
33
|
44
LL | fn unused() {
5-
| ^^^^^^
5+
| ^^^^^^ help: if this is intentional, prefix it with an underscore: `_unused`
66
|
7+
= note: the leading underscore signals that this function serves some other purpose even if it isn't used in a way that we can detect.
78
note: the lint level is defined here
89
--> $DIR/newline-span.rs:1:9
910
|
@@ -14,13 +15,17 @@ error: function is never used: `unused2`
1415
--> $DIR/newline-span.rs:7:4
1516
|
1617
LL | fn unused2(var: i32) {
17-
| ^^^^^^^
18+
| ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_unused2`
19+
|
20+
= note: the leading underscore signals that this function serves some other purpose even if it isn't used in a way that we can detect.
1821

1922
error: function is never used: `unused3`
2023
--> $DIR/newline-span.rs:11:4
2124
|
2225
LL | fn unused3(
23-
| ^^^^^^^
26+
| ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_unused3`
27+
|
28+
= note: the leading underscore signals that this function serves some other purpose even if it isn't used in a way that we can detect.
2429

2530
error: aborting due to 3 previous errors
2631

‎src/test/ui/lint/dead-code/type-alias.stderr

+4-1
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@ error: type alias is never used: `Unused`
22
--> $DIR/type-alias.rs:4:1
33
|
44
LL | type Unused = u8;
5-
| ^^^^^^^^^^^^^^^^^
5+
| ^^^^^------^^^^^^
6+
| |
7+
| help: if this is intentional, prefix it with an underscore: `_Unused`
68
|
9+
= note: the leading underscore signals that this type alias serves some other purpose even if it isn't used in a way that we can detect.
710
note: the lint level is defined here
811
--> $DIR/type-alias.rs:1:9
912
|

‎src/test/ui/lint/dead-code/unused-enum.stderr

+8-3
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@ error: struct is never constructed: `F`
22
--> $DIR/unused-enum.rs:3:8
33
|
44
LL | struct F;
5-
| ^
5+
| ^ help: if this is intentional, prefix it with an underscore: `_F`
66
|
7+
= note: the leading underscore signals that this struct serves some other purpose even if it isn't used in a way that we can detect.
78
note: the lint level is defined here
89
--> $DIR/unused-enum.rs:1:9
910
|
@@ -15,13 +16,17 @@ error: struct is never constructed: `B`
1516
--> $DIR/unused-enum.rs:4:8
1617
|
1718
LL | struct B;
18-
| ^
19+
| ^ help: if this is intentional, prefix it with an underscore: `_B`
20+
|
21+
= note: the leading underscore signals that this struct serves some other purpose even if it isn't used in a way that we can detect.
1922

2023
error: enum is never used: `E`
2124
--> $DIR/unused-enum.rs:6:6
2225
|
2326
LL | enum E {
24-
| ^
27+
| ^ help: if this is intentional, prefix it with an underscore: `_E`
28+
|
29+
= note: the leading underscore signals that this enum serves some other purpose even if it isn't used in a way that we can detect.
2530

2631
error: aborting due to 3 previous errors
2732

‎src/test/ui/lint/dead-code/unused-struct-variant.stderr

+4-1
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@ error: variant is never constructed: `Bar`
22
--> $DIR/unused-struct-variant.rs:8:5
33
|
44
LL | Bar(B),
5-
| ^^^^^^
5+
| ---^^^
6+
| |
7+
| help: if this is intentional, prefix it with an underscore: `_Bar`
68
|
9+
= note: the leading underscore signals that this variant serves some other purpose even if it isn't used in a way that we can detect.
710
note: the lint level is defined here
811
--> $DIR/unused-struct-variant.rs:1:9
912
|

‎src/test/ui/lint/dead-code/unused-variant.stderr

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@ error: variant is never constructed: `Variant1`
22
--> $DIR/unused-variant.rs:5:5
33
|
44
LL | Variant1,
5-
| ^^^^^^^^
5+
| ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_Variant1`
66
|
7+
= note: the leading underscore signals that this variant serves some other purpose even if it isn't used in a way that we can detect.
78
note: the lint level is defined here
89
--> $DIR/unused-variant.rs:1:9
910
|

‎src/test/ui/lint/dead-code/with-core-crate.stderr

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@ error: function is never used: `foo`
22
--> $DIR/with-core-crate.rs:7:4
33
|
44
LL | fn foo() {
5-
| ^^^
5+
| ^^^ help: if this is intentional, prefix it with an underscore: `_foo`
66
|
7+
= note: the leading underscore signals that this function serves some other purpose even if it isn't used in a way that we can detect.
78
note: the lint level is defined here
89
--> $DIR/with-core-crate.rs:1:9
910
|

‎src/test/ui/lint/dead-code/write-only-field.stderr

+29-6
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@ error: field is never read: `f`
22
--> $DIR/write-only-field.rs:4:5
33
|
44
LL | f: i32,
5-
| ^^^^^^
5+
| -^^^^^
6+
| |
7+
| help: if this is intentional, prefix it with an underscore: `_f`
68
|
9+
= note: the leading underscore signals that this field serves some other purpose even if it isn't used in a way that we can detect. (e.g. for its effect when dropped or in foreign code)
710
note: the lint level is defined here
811
--> $DIR/write-only-field.rs:1:9
912
|
@@ -14,31 +17,51 @@ error: field is never read: `sub`
1417
--> $DIR/write-only-field.rs:5:5
1518
|
1619
LL | sub: Sub,
17-
| ^^^^^^^^
20+
| ---^^^^^
21+
| |
22+
| help: if this is intentional, prefix it with an underscore: `_sub`
23+
|
24+
= note: the leading underscore signals that this field serves some other purpose even if it isn't used in a way that we can detect. (e.g. for its effect when dropped or in foreign code)
1825

1926
error: field is never read: `f`
2027
--> $DIR/write-only-field.rs:9:5
2128
|
2229
LL | f: i32,
23-
| ^^^^^^
30+
| -^^^^^
31+
| |
32+
| help: if this is intentional, prefix it with an underscore: `_f`
33+
|
34+
= note: the leading underscore signals that this field serves some other purpose even if it isn't used in a way that we can detect. (e.g. for its effect when dropped or in foreign code)
2435

2536
error: field is never read: `y`
2637
--> $DIR/write-only-field.rs:28:9
2738
|
2839
LL | y: bool,
29-
| ^^^^^^^
40+
| -^^^^^^
41+
| |
42+
| help: if this is intentional, prefix it with an underscore: `_y`
43+
|
44+
= note: the leading underscore signals that this field serves some other purpose even if it isn't used in a way that we can detect. (e.g. for its effect when dropped or in foreign code)
3045

3146
error: field is never read: `u`
3247
--> $DIR/write-only-field.rs:58:9
3348
|
3449
LL | u: u32,
35-
| ^^^^^^
50+
| -^^^^^
51+
| |
52+
| help: if this is intentional, prefix it with an underscore: `_u`
53+
|
54+
= note: the leading underscore signals that this field serves some other purpose even if it isn't used in a way that we can detect. (e.g. for its effect when dropped or in foreign code)
3655

3756
error: field is never read: `v`
3857
--> $DIR/write-only-field.rs:59:9
3958
|
4059
LL | v: u32,
41-
| ^^^^^^
60+
| -^^^^^
61+
| |
62+
| help: if this is intentional, prefix it with an underscore: `_v`
63+
|
64+
= note: the leading underscore signals that this field serves some other purpose even if it isn't used in a way that we can detect. (e.g. for its effect when dropped or in foreign code)
4265

4366
error: aborting due to 6 previous errors
4467

‎src/test/ui/lint/issue-17718-const-naming.stderr

+4-1
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@ error: constant is never used: `foo`
22
--> $DIR/issue-17718-const-naming.rs:4:1
33
|
44
LL | const foo: isize = 3;
5-
| ^^^^^^^^^^^^^^^^^^^^^
5+
| ^^^^^^---^^^^^^^^^^^^
6+
| |
7+
| help: if this is intentional, prefix it with an underscore: `_foo`
68
|
9+
= note: the leading underscore signals that this constant serves some other purpose even if it isn't used in a way that we can detect.
710
note: the lint level is defined here
811
--> $DIR/issue-17718-const-naming.rs:2:9
912
|

‎src/test/ui/span/macro-span-replacement.stderr

+4-1
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,14 @@ warning: struct is never constructed: `S`
22
--> $DIR/macro-span-replacement.rs:7:14
33
|
44
LL | $b $a;
5-
| ^
5+
| --^
6+
| |
7+
| help: if this is intentional, prefix it with an underscore: `_S`
68
...
79
LL | m!(S struct);
810
| ------------- in this macro invocation
911
|
12+
= note: the leading underscore signals that this struct serves some other purpose even if it isn't used in a way that we can detect.
1013
note: the lint level is defined here
1114
--> $DIR/macro-span-replacement.rs:3:9
1215
|

‎src/test/ui/span/unused-warning-point-at-identifier.stderr

+11-4
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@ warning: enum is never used: `Enum`
22
--> $DIR/unused-warning-point-at-identifier.rs:5:6
33
|
44
LL | enum Enum {
5-
| ^^^^
5+
| ^^^^ help: if this is intentional, prefix it with an underscore: `_Enum`
66
|
7+
= note: the leading underscore signals that this enum serves some other purpose even if it isn't used in a way that we can detect.
78
note: the lint level is defined here
89
--> $DIR/unused-warning-point-at-identifier.rs:3:9
910
|
@@ -15,19 +16,25 @@ warning: struct is never constructed: `Struct`
1516
--> $DIR/unused-warning-point-at-identifier.rs:12:8
1617
|
1718
LL | struct Struct {
18-
| ^^^^^^
19+
| ^^^^^^ help: if this is intentional, prefix it with an underscore: `_Struct`
20+
|
21+
= note: the leading underscore signals that this struct serves some other purpose even if it isn't used in a way that we can detect.
1922

2023
warning: function is never used: `func`
2124
--> $DIR/unused-warning-point-at-identifier.rs:19:4
2225
|
2326
LL | fn func() -> usize {
24-
| ^^^^
27+
| ^^^^ help: if this is intentional, prefix it with an underscore: `_func`
28+
|
29+
= note: the leading underscore signals that this function serves some other purpose even if it isn't used in a way that we can detect.
2530

2631
warning: function is never used: `func_complete_span`
2732
--> $DIR/unused-warning-point-at-identifier.rs:24:1
2833
|
2934
LL | func_complete_span()
30-
| ^^^^^^^^^^^^^^^^^^
35+
| ^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_func_complete_span`
36+
|
37+
= note: the leading underscore signals that this function serves some other purpose even if it isn't used in a way that we can detect.
3138

3239
warning: 4 warnings emitted
3340

‎src/test/ui/test-attrs/test-warns-dead-code.stderr

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@ error: function is never used: `dead`
22
--> $DIR/test-warns-dead-code.rs:5:4
33
|
44
LL | fn dead() {}
5-
| ^^^^
5+
| ^^^^ help: if this is intentional, prefix it with an underscore: `_dead`
66
|
7+
= note: the leading underscore signals that this function serves some other purpose even if it isn't used in a way that we can detect.
78
note: the lint level is defined here
89
--> $DIR/test-warns-dead-code.rs:3:9
910
|

‎src/test/ui/union/union-fields-1.stderr

+19-4
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@ error: field is never read: `c`
22
--> $DIR/union-fields-1.rs:6:5
33
|
44
LL | c: u8,
5-
| ^^^^^
5+
| -^^^^
6+
| |
7+
| help: if this is intentional, prefix it with an underscore: `_c`
68
|
9+
= note: the leading underscore signals that this field serves some other purpose even if it isn't used in a way that we can detect. (e.g. for its effect when dropped or in foreign code)
710
note: the lint level is defined here
811
--> $DIR/union-fields-1.rs:1:9
912
|
@@ -14,19 +17,31 @@ error: field is never read: `a`
1417
--> $DIR/union-fields-1.rs:9:5
1518
|
1619
LL | a: u8,
17-
| ^^^^^
20+
| -^^^^
21+
| |
22+
| help: if this is intentional, prefix it with an underscore: `_a`
23+
|
24+
= note: the leading underscore signals that this field serves some other purpose even if it isn't used in a way that we can detect. (e.g. for its effect when dropped or in foreign code)
1825

1926
error: field is never read: `a`
2027
--> $DIR/union-fields-1.rs:13:20
2128
|
2229
LL | union NoDropLike { a: u8 }
23-
| ^^^^^
30+
| -^^^^
31+
| |
32+
| help: if this is intentional, prefix it with an underscore: `_a`
33+
|
34+
= note: the leading underscore signals that this field serves some other purpose even if it isn't used in a way that we can detect. (e.g. for its effect when dropped or in foreign code)
2435

2536
error: field is never read: `c`
2637
--> $DIR/union-fields-1.rs:18:5
2738
|
2839
LL | c: u8,
29-
| ^^^^^
40+
| -^^^^
41+
| |
42+
| help: if this is intentional, prefix it with an underscore: `_c`
43+
|
44+
= note: the leading underscore signals that this field serves some other purpose even if it isn't used in a way that we can detect. (e.g. for its effect when dropped or in foreign code)
3045

3146
error: aborting due to 4 previous errors
3247

‎src/test/ui/union/union-lint-dead-code.stderr

+4-1
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@ error: field is never read: `b`
22
--> $DIR/union-lint-dead-code.rs:5:5
33
|
44
LL | b: bool,
5-
| ^^^^^^^
5+
| -^^^^^^
6+
| |
7+
| help: if this is intentional, prefix it with an underscore: `_b`
68
|
9+
= note: the leading underscore signals that this field serves some other purpose even if it isn't used in a way that we can detect. (e.g. for its effect when dropped or in foreign code)
710
note: the lint level is defined here
811
--> $DIR/union-lint-dead-code.rs:1:9
912
|

0 commit comments

Comments
 (0)
Please sign in to comment.