summaryrefslogtreecommitdiffstats
path: root/tests/ui/lint/unreachable_pub.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:19:13 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:19:13 +0000
commit218caa410aa38c29984be31a5229b9fa717560ee (patch)
treec54bd55eeb6e4c508940a30e94c0032fbd45d677 /tests/ui/lint/unreachable_pub.rs
parentReleasing progress-linux version 1.67.1+dfsg1-1~progress7.99u1. (diff)
downloadrustc-218caa410aa38c29984be31a5229b9fa717560ee.tar.xz
rustc-218caa410aa38c29984be31a5229b9fa717560ee.zip
Merging upstream version 1.68.2+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'tests/ui/lint/unreachable_pub.rs')
-rw-r--r--tests/ui/lint/unreachable_pub.rs66
1 files changed, 66 insertions, 0 deletions
diff --git a/tests/ui/lint/unreachable_pub.rs b/tests/ui/lint/unreachable_pub.rs
new file mode 100644
index 000000000..a50467ce8
--- /dev/null
+++ b/tests/ui/lint/unreachable_pub.rs
@@ -0,0 +1,66 @@
+// check-pass
+
+#![allow(unused)]
+#![warn(unreachable_pub)]
+
+mod private_mod {
+ // non-leaked `pub` items in private module should be linted
+ pub use std::fmt; //~ WARNING unreachable_pub
+ pub use std::env::{Args}; // braced-use has different item spans than unbraced
+ //~^ WARNING unreachable_pub
+
+ pub struct Hydrogen { //~ WARNING unreachable_pub
+ // `pub` struct fields, too
+ pub neutrons: usize, //~ WARNING unreachable_pub
+ // (... but not more-restricted fields)
+ pub(crate) electrons: usize
+ }
+ impl Hydrogen {
+ // impls, too
+ pub fn count_neutrons(&self) -> usize { self.neutrons } //~ WARNING unreachable_pub
+ pub(crate) fn count_electrons(&self) -> usize { self.electrons }
+ }
+ impl Clone for Hydrogen {
+ fn clone(&self) -> Hydrogen {
+ Hydrogen { neutrons: self.neutrons, electrons: self.electrons }
+ }
+ }
+
+ pub enum Helium {} //~ WARNING unreachable_pub
+ pub union Lithium { c1: usize, c2: u8 } //~ WARNING unreachable_pub
+ pub fn beryllium() {} //~ WARNING unreachable_pub
+ pub trait Boron {} //~ WARNING unreachable_pub
+ pub const CARBON: usize = 1; //~ WARNING unreachable_pub
+ pub static NITROGEN: usize = 2; //~ WARNING unreachable_pub
+ pub type Oxygen = bool; //~ WARNING unreachable_pub
+
+ macro_rules! define_empty_struct_with_visibility {
+ ($visibility: vis, $name: ident) => { $visibility struct $name {} }
+ //~^ WARNING unreachable_pub
+ }
+ define_empty_struct_with_visibility!(pub, Fluorine);
+
+ extern "C" {
+ pub fn catalyze() -> bool; //~ WARNING unreachable_pub
+ }
+
+ // items leaked through signatures (see `get_neon` below) are OK
+ pub struct Neon {}
+
+ // crate-visible items are OK
+ pub(crate) struct Sodium {}
+}
+
+pub mod public_mod {
+ // module is public: these are OK, too
+ pub struct Magnesium {}
+ pub(crate) struct Aluminum {}
+}
+
+pub fn get_neon() -> private_mod::Neon {
+ private_mod::Neon {}
+}
+
+fn main() {
+ let _ = get_neon();
+}