Skip to content

Bindings fail to compile with "recursive type .. has infinte size" and "cycle detected when computing drop-check constraints" #1913

Open
@boydjohnson

Description

@boydjohnson

C++ header

template <class a> struct b : a { typename b::c d; };

bindgen command

bindgen test-case-3.hpp -- -x c++

Produced bindings

#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct b<a> {
    pub _base: a,
    pub d: b<a>,
    pub _phantom_0: ::std::marker::PhantomData<::std::cell::UnsafeCell<a>>,
}

rustc --crate-type lib bindings.rs produces

error[E0072]: recursive type `b` has infinite size
 --> bindings.rs:5:1
  |
5 | pub struct b<a> {
  | ^^^^^^^^^^^^^^^ recursive type has infinite size
6 |     pub _base: a,
7 |     pub d: b<a>,
  |            ---- recursive without indirection
  |
help: insert some indirection (e.g., a `Box`, `Rc`, or `&`) to make `b` representable
  |
7 |     pub d: Box<b<a>>,
  |            ^^^^    ^

error[E0391]: cycle detected when computing drop-check constraints for `b`
 --> bindings.rs:5:1
  |
5 | pub struct b<a> {

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions