summary refs log tree commit diff
path: root/tests/ui/lint/dead-code/lint-dead-code-4.rs
diff options
context:
space:
mode:
authorAlbert Larsan <74931857+albertlarsan68@users.noreply.github.com>2023-01-05 09:13:28 +0100
committerAlbert Larsan <74931857+albertlarsan68@users.noreply.github.com>2023-01-11 09:32:08 +0000
commitcf2dff2b1e3fa55fa5415d524200070d0d7aacfe (patch)
tree40a88d9a46aaf3e8870676eb2538378b75a263eb /tests/ui/lint/dead-code/lint-dead-code-4.rs
parentca855e6e42787ecd062d81d53336fe6788ef51a9 (diff)
downloadrust-cf2dff2b1e3fa55fa5415d524200070d0d7aacfe.tar.gz
rust-cf2dff2b1e3fa55fa5415d524200070d0d7aacfe.zip
Move /src/test to /tests
Diffstat (limited to 'tests/ui/lint/dead-code/lint-dead-code-4.rs')
-rw-r--r--tests/ui/lint/dead-code/lint-dead-code-4.rs83
1 files changed, 83 insertions, 0 deletions
diff --git a/tests/ui/lint/dead-code/lint-dead-code-4.rs b/tests/ui/lint/dead-code/lint-dead-code-4.rs
new file mode 100644
index 00000000000..0fc6c6156fd
--- /dev/null
+++ b/tests/ui/lint/dead-code/lint-dead-code-4.rs
@@ -0,0 +1,83 @@
+#![allow(unused_variables)]
+#![allow(non_camel_case_types)]
+#![deny(dead_code)]
+
+struct Foo {
+    x: usize,
+    b: bool, //~ ERROR: field `b` is never read
+}
+
+fn field_read(f: Foo) -> usize {
+    f.x.pow(2)
+}
+
+enum XYZ {
+    X, //~ ERROR variants `X` and `Y` are never constructed
+    Y {
+        a: String,
+        b: i32,
+        c: i32,
+    },
+    Z
+}
+
+enum ABC { //~ ERROR enum `ABC` is never used
+    A,
+    B {
+        a: String,
+        b: i32,
+        c: i32,
+    },
+    C
+}
+
+// ensure struct variants get warning for their fields
+enum IJK {
+    I, //~ ERROR variants `I` and `K` are never constructed
+    J {
+        a: String,
+        b: i32, //~ ERROR fields `b` and `c` are never read
+        c: i32,
+    },
+    K
+
+}
+
+fn struct_variant_partial_use(b: IJK) -> String {
+    match b {
+        IJK::J { a, b: _, .. } => a,
+        _ => "".to_string()
+    }
+}
+
+fn field_match_in_patterns(b: XYZ) -> String {
+    match b {
+        XYZ::Y { a, b: _, .. } => a,
+        _ => "".to_string()
+    }
+}
+
+struct Bar {
+    x: usize, //~ ERROR: fields `x` and `c` are never read
+    b: bool,
+    c: bool,
+    _guard: ()
+}
+
+#[repr(C)]
+struct Baz {
+    x: u32,
+}
+
+fn field_match_in_let(f: Bar) -> bool {
+    let Bar { b, c: _, .. } = f;
+    b
+}
+
+fn main() {
+    field_read(Foo { x: 1, b: false });
+    field_match_in_patterns(XYZ::Z);
+    struct_variant_partial_use(IJK::J { a: "".into(), b: 1, c: -1 });
+    field_match_in_let(Bar { x: 42, b: true, c: false, _guard: () });
+    let _ = Baz { x: 0 };
+}