Closed
Description
Given the header
#pragma pack(1)
struct foo { int x; };
bindgen generates
#[repr(C)]
pub struct foo {
pub x: ::std::os::raw::c_int,
}
which uses repr(C)
instead of repr(packed)
, and therefore has the wrong alignment:
running 1 test
test bindgen_test_layout_foo ... FAILED
failures:
---- bindgen_test_layout_foo stdout ----
thread 'bindgen_test_layout_foo' panicked at 'assertion failed: `(left == right)` (left: `4`, right: `1`): Alignment of foo', testcase.rs:12
note: Run with `RUST_BACKTRACE=1` for a backtrace.
failures:
bindgen_test_layout_foo
test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured
In fact, bindgen emits a warning to this effect:
WARN:bindgen::codegen: Type foo has an unkown attribute that may affect layout
Details
Steps to reproduce:
$ cat testcase.h
#pragma pack(1)
struct foo { int x; };
$ RUST_LOG=bindgen bindgen testcase.h -o testcase.rs
$ rustc --test testcase.rs
$ ./testcase
bindgen 0.22.0
rustc 1.15.1 (021bd294c 2017-02-08)