Skip to content

Confusing cmp_owned false positive with <u32 as From<midly::primitive::u28>>::from #8803

Closed
@PatchMixolydic

Description

@PatchMixolydic

Summary

Unfortunately, I couldn't minimize it, but I tried linting this code. Specifically, this is the area that gave me grief:

// event.delta: midly::primitive::u28
// ticks_since_last_update: &mut u32; comes from an iterator
if u32::from(event.delta) > *ticks_since_last_update {
    // Not ready to proceed yet
    break;
}

I saw this happen:

warning: this creates an owned instance just for comparison
  --> src/lib.rs:96:24
   |
96 |                     if u32::from(event.delta) > *ticks_since_last_update {
   |                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ try implementing the comparison without allocating
   |
   = note: `#[warn(clippy::cmp_owned)]` on by default
   = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cmp_owned

I expected to see this happen:

Nothing. This comparison is fine as-is since u32: Copy, and removing the deref fails to compile. What might be the issue? Strangely enough, removing u32::from silences the lint, even though From<midly::primitive::u28> for u32 doesn't allocate (it just unwraps a newtype, which only copies a u32).

Lint Name

cmp_owned

Reproducer

See above

Version

rustc 1.62.0-nightly (1f7fb6413 2022-04-10)
binary: rustc
commit-hash: 1f7fb6413d6d6c0c929b223e478e44c3db991b03
commit-date: 2022-04-10
host: x86_64-unknown-linux-gnu
release: 1.62.0-nightly
LLVM version: 14.0.0

Additional Labels

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    C-bugCategory: Clippy is not doing the correct thingI-false-positiveIssue: The lint was triggered on code it shouldn't have

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions