Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added constructor return type for wasm32 target #1877

Merged
merged 3 commits into from Aug 25, 2020

Conversation

tuxmark5
Copy link
Contributor

PR to fix #1822

Copy link
Contributor

@emilio emilio left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks! code-wise looks good, but we need to have a test to avoid regressing this.

It should be easy, but if it's not for some reason let me know and I can probably merge with the tweak suggested below.

@@ -495,7 +495,15 @@ impl FunctionSig {
} else {
ty.ret_type().ok_or(ParseError::Continue)?
};
let ret = Item::from_ty_or_ref(ty_ret_type, cursor, None, ctx);

let ret = if ctx.is_target_wasm32() && is_constructor {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we switch the order here, is_constructor is cheaper to check, and should be false most of the time.

Also, can we add a test for this? Should be doable passing --target in the bindgen-args like tests/headers/win32-thiscall_1_0.hpp and others do.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added a commit which addresses both of these comments.

@@ -577,6 +577,14 @@ If you encounter an error missing from this list, please file an issue or a PR!"
}
}

/// Returns `true` if the target architecture is wasm32
pub fn is_target_wasm32(&self) -> bool {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This won't work if building with clang 4 or 3.9 (target_info will be null), but maybe that's fine.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I doubt that wasm backend even existed for those versions of clang and as such I don't think what would be an issue.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We still need to update the test expectations for these two versions, as we run CI on those. To do that you need to add the file in tests/expectations/tests/libclang-3.9 (and same for 4).

With that bit, this patch looks great, thank you!

Copy link
Contributor

@emilio emilio left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks great, thank you!

@emilio emilio merged commit 4608a11 into rust-lang:master Aug 25, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Bindgen generates incorrect return types for C++ class constructors in wasm32-unknown-emscripten
3 participants