gccrs: lint: Do not emit unused warnings for public items
authorArthur Cohen <arthur.cohen@embecosm.com>
Fri, 26 Aug 2022 12:09:24 +0000 (14:09 +0200)
committerArthur Cohen <arthur.cohen@embecosm.com>
Tue, 31 Jan 2023 13:16:49 +0000 (14:16 +0100)
gcc/rust/ChangeLog:

* checks/lints/rust-lint-scan-deadcode.h: Do not report public items
as dead code.

gcc/testsuite/ChangeLog:

* rust/compile/issue-1031.rs: Remove extraneous dead code warnings.
* rust/compile/issue-1289.rs: Likewise.
* rust/compile/test_mod.rs: Likewise.
* rust/compile/torture/raw_identifiers.rs: Likewise.
* rust/compile/torture/raw_identifiers_keywords.rs: Likewise.
* rust/compile/privacy7.rs: New test.

gcc/rust/checks/lints/rust-lint-scan-deadcode.h
gcc/testsuite/rust/compile/issue-1031.rs
gcc/testsuite/rust/compile/issue-1289.rs
gcc/testsuite/rust/compile/privacy7.rs [new file with mode: 0644]
gcc/testsuite/rust/compile/test_mod.rs
gcc/testsuite/rust/compile/torture/raw_identifiers.rs
gcc/testsuite/rust/compile/torture/raw_identifiers_keywords.rs

index 3289b7d..63a3089 100644 (file)
@@ -53,7 +53,7 @@ public:
   void visit (HIR::Function &function) override
   {
     HirId hirId = function.get_mappings ().get_hirid ();
-    if (should_warn (hirId))
+    if (should_warn (hirId) && !function.get_visibility ().is_public ())
       {
        if (mappings->is_impl_item (hirId))
          {
@@ -78,7 +78,7 @@ public:
   void visit (HIR::StructStruct &stct) override
   {
     HirId hirId = stct.get_mappings ().get_hirid ();
-    if (should_warn (hirId))
+    if (should_warn (hirId) && !stct.get_visibility ().is_public ())
       {
        bool name_starts_underscore = stct.get_identifier ().at (0) == '_';
        if (!name_starts_underscore)
@@ -92,7 +92,8 @@ public:
        for (auto &field : stct.get_fields ())
          {
            HirId field_hir_id = field.get_mappings ().get_hirid ();
-           if (should_warn (field_hir_id))
+           if (should_warn (field_hir_id)
+               && !field.get_visibility ().is_public ())
              {
                rust_warning_at (field.get_locus (), 0,
                                 "field is never read: %<%s%>",
@@ -106,7 +107,7 @@ public:
   {
     // only warn tuple struct unconstructed, and ignoring unused field
     HirId hirId = stct.get_mappings ().get_hirid ();
-    if (should_warn (hirId))
+    if (should_warn (hirId) && !stct.get_visibility ().is_public ())
       {
        rust_warning_at (stct.get_locus (), 0,
                         "struct is never constructed: %<%s%>",
index 939f0f9..5ba8f7a 100644 (file)
@@ -6,12 +6,10 @@ extern "rust-intrinsic" {
 #[lang = "const_ptr"]
 impl<T> *const T {
     pub const unsafe fn offset(self, count: isize) -> *const T {
-        // { dg-warning "associated function is never used" "" { target *-*-* } .-1 }
         unsafe { offset(self, count) }
     }
 
     pub const unsafe fn add(self, count: usize) -> Self {
-        // { dg-warning "associated function is never used" "" { target *-*-* } .-1 }
         unsafe { self.offset(count as isize) }
     }
 }
index 343aaab..eb41af0 100644 (file)
@@ -23,12 +23,10 @@ impl<T> *mut T {
 #[lang = "const_ptr"]
 impl<T> *const T {
     pub const unsafe fn offset(self, count: isize) -> *mut T {
-        // { dg-warning "associated function is never used" "" { target *-*-* } .-1 }
         unsafe { intrinsics::offset(self, count) as *mut T }
     }
 
     pub const unsafe fn add(self, count: usize) -> Self {
-        // { dg-warning "associated function is never used" "" { target *-*-* } .-1 }
         unsafe { self.offset(count as isize) }
     }
 }
diff --git a/gcc/testsuite/rust/compile/privacy7.rs b/gcc/testsuite/rust/compile/privacy7.rs
new file mode 100644 (file)
index 0000000..00fa0ef
--- /dev/null
@@ -0,0 +1,9 @@
+pub struct Foo(i8);
+struct Bar(pub i8); // { dg-warning "struct is never constructed: .Bar." }
+pub struct Baz {
+    a: i32, // { dg-warning "field is never read: .a." }
+    pub b: i32,
+}
+
+pub fn foo() {}
+fn bar() {} // { dg-warning "function is never used: .bar." }
index 4b3c000..6e9c19b 100644 (file)
@@ -3,4 +3,3 @@
 //! foo bar baz cake pizza carbs
 
 pub struct Test(pub i32);
-// { dg-warning "struct is never constructed" "" { target *-*-* } .-1 }
index 8746f33..7e6cd91 100644 (file)
@@ -1,3 +1,3 @@
-pub fn square(num: i32) -> i32 { /* { dg-warning "used" } */
+pub fn square(num: i32) -> i32 {
     r#num * num
-}
\ No newline at end of file
+}
index c9aa3cf..3a15223 100644 (file)
@@ -1,3 +1,3 @@
-pub fn plus(r#break: i32, r#unsafe: i32) -> i32 { /* { dg-warning "used" } */
+pub fn plus(r#break: i32, r#unsafe: i32) -> i32 {
     r#break + r#unsafe
-}
\ No newline at end of file
+}