Does #[repr(packed)] have a drop flag?


#1

I am trying to figure out whether data that has repr(packed) has a drop flag or not. None of the documentation seems to mention it. It would seem rather odd for it to contain a drop flag (since that would make FFI difficult).

I feel that it should be mentioned somewhere in the docs whether it has one or not. If it does have one, I would like to be able to remove it (and remove all drop semantics)

Note: my use case is a memory manager for micro-controllers, so the gory details are where I’m at!


#2

The last Nighties don’t add drop flags inside structs.


#3

For FFI you probably want #[repr(C)] or #[repr(C, packed)], and then you’ll get a warning like:

warning: implementing Drop adds hidden state to types, possibly conflicting with `#[repr(C)]`, #[warn(drop_with_repr_extern)] on by default

… at least until you’re on a newer rustc that doesn’t have drop flags, as @leonardo mentioned.


#4

I keep up to date with the most recent nightly.

If I care about the ordering of my data (and I want it packed) should I use #[repr(packed)] or #[repr(C, packed)]? I thought they were equivalent.


#5

https://doc.rust-lang.org/reference.html#ffi-attributes

On structs:

  • repr - specifies the representation to use for this struct. Takes a list of options. The currently accepted ones are C and packed, which may be combined. C will use a C ABI compatible struct layout, and packed will remove any padding between fields (note that this is very fragile and may break platforms which require aligned access).

#6

awesome, thanks so much guys.

Btw, if you are curious in the library it is:

I hope to be feature-complete and in Alpha soon