diff options
author | Audrius <tuxmarkv@gmail.com> | 2020-08-24 16:29:43 +0300 |
---|---|---|
committer | Audrius <tuxmarkv@gmail.com> | 2020-08-24 16:29:43 +0300 |
commit | b1cefe2395fcf2e8f0d581ad0e0ccae49a45dcb5 (patch) | |
tree | 86fd767e4ee2bcb67787a6a13e2e2ccd4cfe466e | |
parent | 7ed01270a54b811c73b16bc20b8ec8e52ddbfcf3 (diff) |
Optimized condition order, added regression test
-rw-r--r-- | src/ir/function.rs | 2 | ||||
-rw-r--r-- | tests/expectations/tests/wasm-constructor-returns.rs | 40 | ||||
-rw-r--r-- | tests/headers/wasm-constructor-returns.hpp | 7 |
3 files changed, 48 insertions, 1 deletions
diff --git a/src/ir/function.rs b/src/ir/function.rs index 0eecf960..a6f63a64 100644 --- a/src/ir/function.rs +++ b/src/ir/function.rs @@ -496,7 +496,7 @@ impl FunctionSig { ty.ret_type().ok_or(ParseError::Continue)? }; - let ret = if ctx.is_target_wasm32() && is_constructor { + let ret = if is_constructor && ctx.is_target_wasm32() { // Constructors in Clang wasm32 target return a pointer to the object // being constructed. let void = Item::builtin_type(TypeKind::Void, false, ctx); diff --git a/tests/expectations/tests/wasm-constructor-returns.rs b/tests/expectations/tests/wasm-constructor-returns.rs new file mode 100644 index 00000000..6d15c51f --- /dev/null +++ b/tests/expectations/tests/wasm-constructor-returns.rs @@ -0,0 +1,40 @@ +#![allow( + dead_code, + non_snake_case, + non_camel_case_types, + non_upper_case_globals +)] + +#[repr(C)] +#[derive(Debug, Default, Copy, Clone)] +pub struct Foo { + pub _address: u8, +} +#[test] +fn bindgen_test_layout_Foo() { + assert_eq!( + ::std::mem::size_of::<Foo>(), + 1usize, + concat!("Size of: ", stringify!(Foo)) + ); + assert_eq!( + ::std::mem::align_of::<Foo>(), + 1usize, + concat!("Alignment of ", stringify!(Foo)) + ); +} +extern "C" { + #[link_name = "\u{1}_ZN3FooC1Ei"] + pub fn Foo_Foo( + this: *mut Foo, + var: ::std::os::raw::c_int, + ) -> *mut ::std::os::raw::c_void; +} +impl Foo { + #[inline] + pub unsafe fn new(var: ::std::os::raw::c_int) -> Self { + let mut __bindgen_tmp = ::std::mem::MaybeUninit::uninit(); + Foo_Foo(__bindgen_tmp.as_mut_ptr(), var); + __bindgen_tmp.assume_init() + } +} diff --git a/tests/headers/wasm-constructor-returns.hpp b/tests/headers/wasm-constructor-returns.hpp new file mode 100644 index 00000000..9e470327 --- /dev/null +++ b/tests/headers/wasm-constructor-returns.hpp @@ -0,0 +1,7 @@ +// bindgen-flags: --generate constructors,types -- -fvisibility=default --target=wasm32-unknown-emscripten + +class Foo { +public: + Foo(int var); +}; + |