summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlier Lu <flier.lu@gmail.com>2017-01-29 00:00:24 +0800
committerFlier Lu <flier.lu@gmail.com>2017-01-29 00:00:24 +0800
commit4eccd3cf2d6518ceed42156d76cf054a97360e58 (patch)
treeb11c01869bd3bfe745c67a4bd78eec14de1832ba
parent0958c7d46ad7e5f9eca21c3bfe5de998559cecde (diff)
more test cases for zero length array and incomplete array
-rw-r--r--tests/expectations/tests/class.rs38
-rw-r--r--tests/headers/class.hpp20
2 files changed, 56 insertions, 2 deletions
diff --git a/tests/expectations/tests/class.rs b/tests/expectations/tests/class.rs
index 3852cc04..1b8235cb 100644
--- a/tests/expectations/tests/class.rs
+++ b/tests/expectations/tests/class.rs
@@ -53,8 +53,6 @@ impl <T> ::std::fmt::Debug for __BindgenUnionField<T> {
pub struct C {
pub a: ::std::os::raw::c_int,
pub big_array: [::std::os::raw::c_char; 33usize],
- pub zero_length_array: __IncompleteArrayField<::std::os::raw::c_char>,
- pub incomplete_array: __IncompleteArrayField<::std::os::raw::c_char>,
}
#[test]
fn bindgen_test_layout_C() {
@@ -62,6 +60,42 @@ fn bindgen_test_layout_C() {
assert_eq!(::std::mem::align_of::<C>() , 4usize);
}
#[repr(C)]
+pub struct C_with_zero_length_array {
+ pub a: ::std::os::raw::c_int,
+ pub big_array: [::std::os::raw::c_char; 33usize],
+ pub zero_length_array: __IncompleteArrayField<::std::os::raw::c_char>,
+}
+#[test]
+fn bindgen_test_layout_C_with_zero_length_array() {
+ assert_eq!(::std::mem::size_of::<C_with_zero_length_array>() , 40usize);
+ assert_eq!(::std::mem::align_of::<C_with_zero_length_array>() , 4usize);
+}
+#[repr(C)]
+pub struct C_with_incomplete_array {
+ pub a: ::std::os::raw::c_int,
+ pub big_array: [::std::os::raw::c_char; 33usize],
+ pub incomplete_array: __IncompleteArrayField<::std::os::raw::c_char>,
+}
+#[test]
+fn bindgen_test_layout_C_with_incomplete_array() {
+ assert_eq!(::std::mem::size_of::<C_with_incomplete_array>() , 40usize);
+ assert_eq!(::std::mem::align_of::<C_with_incomplete_array>() , 4usize);
+}
+#[repr(C)]
+pub struct C_with_zero_length_array_and_incomplete_array {
+ pub a: ::std::os::raw::c_int,
+ pub big_array: [::std::os::raw::c_char; 33usize],
+ pub zero_length_array: __IncompleteArrayField<::std::os::raw::c_char>,
+ pub incomplete_array: __IncompleteArrayField<::std::os::raw::c_char>,
+}
+#[test]
+fn bindgen_test_layout_C_with_zero_length_array_and_incomplete_array() {
+ assert_eq!(::std::mem::size_of::<C_with_zero_length_array_and_incomplete_array>()
+ , 40usize);
+ assert_eq!(::std::mem::align_of::<C_with_zero_length_array_and_incomplete_array>()
+ , 4usize);
+}
+#[repr(C)]
#[derive(Debug)]
pub struct WithDtor {
pub b: ::std::os::raw::c_int,
diff --git a/tests/headers/class.hpp b/tests/headers/class.hpp
index 402f8b2b..67ecb37b 100644
--- a/tests/headers/class.hpp
+++ b/tests/headers/class.hpp
@@ -2,6 +2,26 @@ class C {
int a;
// More than rust limits (32)
char big_array[33];
+};
+
+class C_with_zero_length_array {
+ int a;
+ // More than rust limits (32)
+ char big_array[33];
+ char zero_length_array[0];
+};
+
+class C_with_incomplete_array {
+ int a;
+ // More than rust limits (32)
+ char big_array[33];
+ char incomplete_array[];
+};
+
+class C_with_zero_length_array_and_incomplete_array {
+ int a;
+ // More than rust limits (32)
+ char big_array[33];
char zero_length_array[0];
char incomplete_array[];
};