Skip to content

Warning when using packed_bits on a field wider than u8. #15

@konkers

Description

@konkers

I'm trying to create a descriptor for a joystick with 10 buttons:

#[gen_hid_descriptor(
    (collection = APPLICATION, usage_page = GENERIC_DESKTOP, usage = JOYSTICK) = {
        (usage = X,) = {x=input;};
        (usage = Y,) = {y=input;};
        (usage_page = BUTTON, usage_min = BUTTON_1, usage_max = 10) = {
            #[packed_bits 10] #[item_settings data,variable,absolute] buttons=input;
        };
    }
)]
struct InputReport {
    x: u8,
    y: u8,
    buttons: u16,
}

This yields the following warning:

warning: borrow of packed field is unsafe and requires unsafe function or block (error E0133)
  --> targets\stm32f072-disco\src\main.rs:23:1
   |
23 | / #[gen_hid_descriptor(
24 | |     (collection = APPLICATION, usage_page = GENERIC_DESKTOP, usage = JOYSTICK) = {
25 | |         (usage = X,) = {x=input;};
26 | |         (usage = Y,) = {y=input;};
...  |
30 | |     }
31 | | )]
   | |__^
   |
   = note: `#[warn(safe_packed_borrows)]` on by default
   = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
   = note: for more information, see issue #46043 <https://github.com/rust-lang/rust/issues/46043>
   = note: fields of packed structs might be misaligned: dereferencing a misaligned pointer or even just creating a misaligned reference is undefined behavior
   = note: this warning originates in an attribute macro (in Nightly builds, run with -Z macro-backtrace for more info)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions