Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

clippy::cast_lossless lint should be silenced #270

Open
sunshowers opened this issue Jul 30, 2024 · 1 comment
Open

clippy::cast_lossless lint should be silenced #270

sunshowers opened this issue Jul 30, 2024 · 1 comment

Comments

@sunshowers
Copy link
Collaborator

With Rust 1.80 and this code:

#[usdt::provider(provider = "nexus_db_queries")]
mod probes {
    // Fires before we start a search over a range for a VNI.
    //
    // Includes the starting VNI and the size of the range being searched.
    fn vni__search__range__start(
        _: &usdt::UniqueId,
        start_vni: u32,
        size: u32,
    ) {
    }

    // Fires when we successfully find a VNI.
    fn vni__search__range__found(_: &usdt::UniqueId, vni: u32) {}

    // Fires when we fail to find a VNI in the provided range.
    fn vni__search__range__empty(_: &usdt::UniqueId) {}
}

// ...

crate::probes::vni__search__range__start!(|| {
    (&id, u32::from(vni), VniSearchIter::STEP_SIZE)
});

Running cargo clippy with the clippy::cast_lossless lint enabled produces this warning:

asting `u32` to `#[usdt::provider(provider = "nexus_db_queries")]` may become silently lossy if you later change the type
   --> nexus/db-queries/src/lib.rs:24:1
    |
24  |   #[usdt::provider(provider = "nexus_db_queries")]
    |   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
   ::: nexus/db-queries/src/db/datastore/vpc.rs:360:13
    |
360 | /             crate::probes::vni__search__range__start!(|| {
361 | |                 (&id, u32::from(vni), VniSearchIter::STEP_SIZE)
362 | |             });
    | |______________- in this macro invocation
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless
    = note: `-D clippy::cast-lossless` implied by `-D warnings`
    = help: to override `-D warnings` add `#[allow(clippy::cast_lossless)]`
    = note: this error originates in the macro `crate::probes::vni__search__range__start` (in Nightly builds, run with -Z macro-backtrace for more info)
help: try
    |
24  + #[usdt::provider(provider = "nexus_db_queries")]::from(crate::probes::vni__search__range__start!(|| {
25  +                 (&id, u32::from(vni), VniSearchIter::STEP_SIZE)
26  +             }))
    |

error: casting `u32` to `#[usdt::provider(provider = "nexus_db_queries")]` may become silently lossy if you later change the type
   --> nexus/db-queries/src/lib.rs:24:1
    |
24  |   #[usdt::provider(provider = "nexus_db_queries")]
    |   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
   ::: nexus/db-queries/src/db/datastore/vpc.rs:372:21
    |
372 | /                     crate::probes::vni__search__range__found!(|| {
373 | |                         (&id, u32::from(vpc.vni.0))
374 | |                     });
    | |______________________- in this macro invocation
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless
    = note: this error originates in the macro `crate::probes::vni__search__range__found` (in Nightly builds, run with -Z macro-backtrace for more info)
help: try
    |
24  + #[usdt::provider(provider = "nexus_db_queries")]::from(crate::probes::vni__search__range__found!(|| {
25  +                         (&id, u32::from(vpc.vni.0))
26  +                     }))
    |

From a quick look at cargo expand, it looks like this code is produced:

if is_enabled != 0 {
    let args = __usdt_private_args_lambda();
    let arg_0 = args.0.as_u64() as i64;
    let arg_1 = (*<_ as ::std::borrow::Borrow<
        u32,
    >>::borrow(&args.1) as i64);
    let arg_2 = (*<_ as ::std::borrow::Borrow<
        u32,
    >>::borrow(&args.2) as i64);

    // ...
}

I think this code is what's producing the warning.

Since this is autogenerated code, we should silence this lint. I think annotating with automatically_derived might work? If not then explicitly silencing this lint should do the job.

@bnaecker
Copy link
Collaborator

Agreed, let's silence this inside the generated code.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants