summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAudrius <tuxmarkv@gmail.com>2020-08-24 16:29:43 +0300
committerAudrius <tuxmarkv@gmail.com>2020-08-24 16:29:43 +0300
commitb1cefe2395fcf2e8f0d581ad0e0ccae49a45dcb5 (patch)
tree86fd767e4ee2bcb67787a6a13e2e2ccd4cfe466e
parent7ed01270a54b811c73b16bc20b8ec8e52ddbfcf3 (diff)
Optimized condition order, added regression test
-rw-r--r--src/ir/function.rs2
-rw-r--r--tests/expectations/tests/wasm-constructor-returns.rs40
-rw-r--r--tests/headers/wasm-constructor-returns.hpp7
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);
+};
+