diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 12:18:32 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 12:18:32 +0000 |
commit | 4547b622d8d29df964fa2914213088b148c498fc (patch) | |
tree | 9fc6b25f3c3add6b745be9a2400a6e96140046e9 /src/tools/clippy/tests/ui-toml/mut_key | |
parent | Releasing progress-linux version 1.66.0+dfsg1-1~progress7.99u1. (diff) | |
download | rustc-4547b622d8d29df964fa2914213088b148c498fc.tar.xz rustc-4547b622d8d29df964fa2914213088b148c498fc.zip |
Merging upstream version 1.67.1+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/tools/clippy/tests/ui-toml/mut_key')
-rw-r--r-- | src/tools/clippy/tests/ui-toml/mut_key/clippy.toml | 1 | ||||
-rw-r--r-- | src/tools/clippy/tests/ui-toml/mut_key/mut_key.rs | 53 |
2 files changed, 54 insertions, 0 deletions
diff --git a/src/tools/clippy/tests/ui-toml/mut_key/clippy.toml b/src/tools/clippy/tests/ui-toml/mut_key/clippy.toml new file mode 100644 index 000000000..6d33e192e --- /dev/null +++ b/src/tools/clippy/tests/ui-toml/mut_key/clippy.toml @@ -0,0 +1 @@ +ignore-interior-mutability = ["mut_key::Counted"]
\ No newline at end of file diff --git a/src/tools/clippy/tests/ui-toml/mut_key/mut_key.rs b/src/tools/clippy/tests/ui-toml/mut_key/mut_key.rs new file mode 100644 index 000000000..667c51cb4 --- /dev/null +++ b/src/tools/clippy/tests/ui-toml/mut_key/mut_key.rs @@ -0,0 +1,53 @@ +// compile-flags: --crate-name mut_key + +#![warn(clippy::mutable_key_type)] + +use std::cmp::{Eq, PartialEq}; +use std::collections::{HashMap, HashSet}; +use std::hash::{Hash, Hasher}; +use std::ops::Deref; +use std::sync::atomic::{AtomicUsize, Ordering}; + +struct Counted<T> { + count: AtomicUsize, + val: T, +} + +impl<T: Clone> Clone for Counted<T> { + fn clone(&self) -> Self { + Self { + count: AtomicUsize::new(0), + val: self.val.clone(), + } + } +} + +impl<T: PartialEq> PartialEq for Counted<T> { + fn eq(&self, other: &Self) -> bool { + self.val == other.val + } +} +impl<T: PartialEq + Eq> Eq for Counted<T> {} + +impl<T: Hash> Hash for Counted<T> { + fn hash<H: Hasher>(&self, state: &mut H) { + self.val.hash(state); + } +} + +impl<T> Deref for Counted<T> { + type Target = T; + + fn deref(&self) -> &T { + self.count.fetch_add(1, Ordering::AcqRel); + &self.val + } +} + +// This is not linted because `"mut_key::Counted"` is in +// `arc_like_types` in `clippy.toml` +fn should_not_take_this_arg(_v: HashSet<Counted<String>>) {} + +fn main() { + should_not_take_this_arg(HashSet::new()); +} |