Skip to content

Do not derive Clone/Copy/etc for opaque types #1656

@VeaaC

Description

@VeaaC

Currently bindgen will generate code that derives for opaque types, e.g.:

typedef struct MyOpaqueStruct MyOpaqueStruct;
#[derive(Copy, Clone, Debug)]
pub struct MyOpaqueStruct {
    _unused: [u8; 0],
}

This has several problems:

  • If a user can obtain a reference to a type they can clone it, even though that is normally only possible through FFI calls, and will almost always result in UB
  • It prevents a user from implementing those traits on their own

The only current solution seems to be to turn of those derivations completely, forcing a user to implement them manually on the non-opaque types.

I would suggest to just not derive any of these in case of an opaque struct (since I cannot come up with a use-case were they would actually work)

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions