summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/ir/comp.rs6
-rw-r--r--tests/expectations/tests/forward_declared_complex_types_1_0.rs9
-rw-r--r--tests/expectations/tests/forward_declared_opaque.rs19
-rw-r--r--tests/headers/forward_declared_opaque.h4
4 files changed, 36 insertions, 2 deletions
diff --git a/src/ir/comp.rs b/src/ir/comp.rs
index 0637d2bc..6c0563b1 100644
--- a/src/ir/comp.rs
+++ b/src/ir/comp.rs
@@ -1072,6 +1072,12 @@ impl CompInfo {
return None;
}
+ // By definition, we don't have the right layout information here if
+ // we're a forward declaration.
+ if self.is_forward_declaration() {
+ return None;
+ }
+
let mut max_size = 0;
let mut max_align = 0;
for field in self.fields() {
diff --git a/tests/expectations/tests/forward_declared_complex_types_1_0.rs b/tests/expectations/tests/forward_declared_complex_types_1_0.rs
index 0a6a32be..011ab35e 100644
--- a/tests/expectations/tests/forward_declared_complex_types_1_0.rs
+++ b/tests/expectations/tests/forward_declared_complex_types_1_0.rs
@@ -1,6 +1,11 @@
/* automatically generated by rust-bindgen */
-#![allow(dead_code, non_snake_case, non_camel_case_types, non_upper_case_globals)]
+#![allow(
+ dead_code,
+ non_snake_case,
+ non_camel_case_types,
+ non_upper_case_globals
+)]
#[repr(C)]
#[derive(Debug, Default, Copy)]
@@ -73,7 +78,7 @@ extern "C" {
pub fn baz_struct(f: *mut Foo);
}
#[repr(C)]
-#[derive(Copy)]
+#[derive(Debug, Copy)]
pub struct Union {
_unused: [u8; 0],
}
diff --git a/tests/expectations/tests/forward_declared_opaque.rs b/tests/expectations/tests/forward_declared_opaque.rs
new file mode 100644
index 00000000..44aff91f
--- /dev/null
+++ b/tests/expectations/tests/forward_declared_opaque.rs
@@ -0,0 +1,19 @@
+/* automatically generated by rust-bindgen */
+
+#![allow(
+ dead_code,
+ non_snake_case,
+ non_camel_case_types,
+ non_upper_case_globals
+)]
+
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct a {
+ _unused: [u8; 0],
+}
+#[repr(C)]
+#[derive(Debug, Default, Copy, Clone)]
+pub struct b {
+ _unused: [u8; 0],
+}
diff --git a/tests/headers/forward_declared_opaque.h b/tests/headers/forward_declared_opaque.h
new file mode 100644
index 00000000..1b58edb9
--- /dev/null
+++ b/tests/headers/forward_declared_opaque.h
@@ -0,0 +1,4 @@
+// bindgen-flags: --opaque-type "*"
+
+union a;
+struct b; \ No newline at end of file