summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libbindgen/src/codegen/mod.rs10
-rw-r--r--libbindgen/tests/expectations/tests/resolved_type_def_function.rs3
2 files changed, 6 insertions, 7 deletions
diff --git a/libbindgen/src/codegen/mod.rs b/libbindgen/src/codegen/mod.rs
index 192eb674..e9141b9c 100644
--- a/libbindgen/src/codegen/mod.rs
+++ b/libbindgen/src/codegen/mod.rs
@@ -2010,14 +2010,10 @@ impl CodeGenerator for Function {
}
let signature_item = ctx.resolve_item(self.signature());
- let signature = signature_item.kind().expect_type();
+ let signature = signature_item.kind().expect_type().canonical_type(ctx);
let signature = match *signature.kind() {
TypeKind::Function(ref sig) => sig,
- TypeKind::ResolvedTypeRef(ref item_id) => {
- let item = ctx.resolve_item(*item_id);
- return self.codegen(ctx, result, _whitelisted_items, item);
- },
- _ => panic!("How?")
+ _ => panic!("Signature kind is not a Function: {:?}", signature),
};
let fndecl = utils::rust_fndecl_from_signature(ctx, signature_item);
@@ -2268,7 +2264,7 @@ mod utils {
-> P<ast::FnDecl> {
use codegen::ToRustTy;
- let signature = sig.kind().expect_type();
+ let signature = sig.kind().expect_type().canonical_type(ctx);
let signature = match *signature.kind() {
TypeKind::Function(ref sig) => sig,
_ => panic!("How?"),
diff --git a/libbindgen/tests/expectations/tests/resolved_type_def_function.rs b/libbindgen/tests/expectations/tests/resolved_type_def_function.rs
index fb308fa4..83f07dd0 100644
--- a/libbindgen/tests/expectations/tests/resolved_type_def_function.rs
+++ b/libbindgen/tests/expectations/tests/resolved_type_def_function.rs
@@ -5,3 +5,6 @@
pub type FuncType = ::std::option::Option<unsafe extern "C" fn()>;
+extern "C" {
+ pub fn Func();
+}