From eebb3eb983eecb98834aaea3d1e6eb3266132f30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20Cobos=20=C3=81lvarez?= Date: Thu, 15 Jun 2023 13:45:13 +0200 Subject: [PATCH] tests: Add a test for #2556 --- .../tests/expectations/tests/issue-2556.rs | 43 +++++++++++++++++++ bindgen-tests/tests/headers/issue-2556.h | 4 ++ .../headers/issue-2556/LayoutConstants.h | 7 +++ .../tests/headers/issue-2556/nsSize.h | 6 +++ .../tests/headers/issue-2556/nsStyleStruct.h | 3 ++ 5 files changed, 63 insertions(+) create mode 100644 bindgen-tests/tests/expectations/tests/issue-2556.rs create mode 100644 bindgen-tests/tests/headers/issue-2556.h create mode 100644 bindgen-tests/tests/headers/issue-2556/LayoutConstants.h create mode 100644 bindgen-tests/tests/headers/issue-2556/nsSize.h create mode 100644 bindgen-tests/tests/headers/issue-2556/nsStyleStruct.h diff --git a/bindgen-tests/tests/expectations/tests/issue-2556.rs b/bindgen-tests/tests/expectations/tests/issue-2556.rs new file mode 100644 index 0000000000..7722b851e2 --- /dev/null +++ b/bindgen-tests/tests/expectations/tests/issue-2556.rs @@ -0,0 +1,43 @@ +#![allow(dead_code, non_snake_case, non_camel_case_types, non_upper_case_globals)] +#[allow(non_snake_case, non_camel_case_types, non_upper_case_globals)] +pub mod root { + #[allow(unused_imports)] + use self::super::root; + #[repr(C)] + #[derive(Debug, Default, Copy, Clone)] + pub struct nsSize { + pub width: ::std::os::raw::c_int, + pub height: ::std::os::raw::c_int, + } + #[test] + fn bindgen_test_layout_nsSize() { + const UNINIT: ::std::mem::MaybeUninit = ::std::mem::MaybeUninit::uninit(); + let ptr = UNINIT.as_ptr(); + assert_eq!( + ::std::mem::size_of:: < nsSize > (), 8usize, concat!("Size of: ", + stringify!(nsSize)) + ); + assert_eq!( + ::std::mem::align_of:: < nsSize > (), 4usize, concat!("Alignment of ", + stringify!(nsSize)) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((* ptr).width) as usize - ptr as usize }, + 0usize, concat!("Offset of field: ", stringify!(nsSize), "::", + stringify!(width)) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((* ptr).height) as usize - ptr as usize }, + 4usize, concat!("Offset of field: ", stringify!(nsSize), "::", + stringify!(height)) + ); + } + pub mod foo { + #[allow(unused_imports)] + use self::super::super::root; + extern "C" { + #[link_name = "\u{1}_ZN3fooL22kFallbackIntrinsicSizeE"] + pub static kFallbackIntrinsicSize: root::nsSize; + } + } +} diff --git a/bindgen-tests/tests/headers/issue-2556.h b/bindgen-tests/tests/headers/issue-2556.h new file mode 100644 index 0000000000..bbb1b874ec --- /dev/null +++ b/bindgen-tests/tests/headers/issue-2556.h @@ -0,0 +1,4 @@ +// bindgen-flags: --enable-cxx-namespaces -- -x c++ -Itests/headers -include tests/headers/issue-2556/nsStyleStruct.h -include tests/headers/issue-2556/LayoutConstants.h + +#include "issue-2556/nsSize.h" +#include "issue-2556/nsStyleStruct.h" diff --git a/bindgen-tests/tests/headers/issue-2556/LayoutConstants.h b/bindgen-tests/tests/headers/issue-2556/LayoutConstants.h new file mode 100644 index 0000000000..bf69b5e5b1 --- /dev/null +++ b/bindgen-tests/tests/headers/issue-2556/LayoutConstants.h @@ -0,0 +1,7 @@ +#include "nsSize.h" + +namespace foo { + +static constexpr nsSize kFallbackIntrinsicSize(0, 0); + +} // namespace mozilla diff --git a/bindgen-tests/tests/headers/issue-2556/nsSize.h b/bindgen-tests/tests/headers/issue-2556/nsSize.h new file mode 100644 index 0000000000..8fe8b95023 --- /dev/null +++ b/bindgen-tests/tests/headers/issue-2556/nsSize.h @@ -0,0 +1,6 @@ +#pragma once + +struct nsSize { + int width, height; + constexpr nsSize(int aWidth, int aHeight) : width(aWidth), height(aHeight) {} +}; diff --git a/bindgen-tests/tests/headers/issue-2556/nsStyleStruct.h b/bindgen-tests/tests/headers/issue-2556/nsStyleStruct.h new file mode 100644 index 0000000000..4c6eedfb9a --- /dev/null +++ b/bindgen-tests/tests/headers/issue-2556/nsStyleStruct.h @@ -0,0 +1,3 @@ +#pragma once + +#include "nsSize.h"