From 17e20030ea99c7ad036af1aa65110f315f13c61c Mon Sep 17 00:00:00 2001 From: Emilio Cobos Álvarez Date: Thu, 29 Dec 2016 18:03:01 +0100 Subject: codegen: Use the canonical type to determine whether we should convert to a pointer an argument. Fixes https://github.com/Yamakaky/rust-bindgen/issues/407 --- libbindgen/src/codegen/mod.rs | 2 +- .../tests/expectations/tests/typedefd-array-as-function-arg.rs | 10 ++++++++++ libbindgen/tests/headers/typedefd-array-as-function-arg.h | 3 +++ 3 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 libbindgen/tests/expectations/tests/typedefd-array-as-function-arg.rs create mode 100644 libbindgen/tests/headers/typedefd-array-as-function-arg.h diff --git a/libbindgen/src/codegen/mod.rs b/libbindgen/src/codegen/mod.rs index 69d5f651..b03c9f21 100644 --- a/libbindgen/src/codegen/mod.rs +++ b/libbindgen/src/codegen/mod.rs @@ -1945,7 +1945,7 @@ impl ToRustTy for FunctionSig { // the array type derivation. // // [1]: http://c0x.coding-guidelines.com/6.7.5.3.html - let arg_ty = if let TypeKind::Array(t, _) = *arg_ty.kind() { + let arg_ty = if let TypeKind::Array(t, _) = *arg_ty.canonical_type(ctx).kind() { t.to_rust_ty(ctx).to_ptr(arg_ty.is_const(), ctx.span()) } else { arg_item.to_rust_ty(ctx) diff --git a/libbindgen/tests/expectations/tests/typedefd-array-as-function-arg.rs b/libbindgen/tests/expectations/tests/typedefd-array-as-function-arg.rs new file mode 100644 index 00000000..56074f75 --- /dev/null +++ b/libbindgen/tests/expectations/tests/typedefd-array-as-function-arg.rs @@ -0,0 +1,10 @@ +/* automatically generated by rust-bindgen */ + + +#![allow(non_snake_case)] + + +pub type myVector3 = [f32; 3usize]; +extern "C" { + pub fn modifyVectorFunc(v: *mut f32); +} diff --git a/libbindgen/tests/headers/typedefd-array-as-function-arg.h b/libbindgen/tests/headers/typedefd-array-as-function-arg.h new file mode 100644 index 00000000..93790591 --- /dev/null +++ b/libbindgen/tests/headers/typedefd-array-as-function-arg.h @@ -0,0 +1,3 @@ +// foo.h +typedef float myVector3[3]; +void modifyVectorFunc(myVector3 v); -- cgit v1.2.3