Skip to content

on 32-bit platform (e.g. PI) including sys/param.h causes 'shift left with overflow error'. #739

@noyez

Description

@noyez

Input C/C++ Header

#include <sys/param.h>

Bindgen Invocation

        let bindings = bindgen::Builder::default()
            .no_unstable_rust()
            .header("use_sys_param.h")
            .generate()
            .expect("Unable to generate bindings");

Actual Results

pi@pirepeater:~/source/bindgen-test$ RUST_BACKTRACE=1 RUST_LOG=bindgen cargo build
   Compiling bindgen-test v0.1.0 (file:///home/pi/source/bindgen-test)
error: failed to run custom build command for `bindgen-test v0.1.0 (file:///home/pi/source/bindgen-test)`
process didn't exit successfully: `/home/pi/source/bindgen-test/target/debug/build/bindgen-test-d1b6d9223679bb31/build-script-build` (exit code: 101)
--- stderr
thread 'main' panicked at 'attempt to shift left with overflow', /home/pi/.cargo/registry/src/git.colasdn.top-1ecc6299db9ec823/bindgen-0.25.3/src/ir/comp.rs:297
stack backtrace:
   0: std::sys::imp::backtrace::tracing::imp::unwind_backtrace
             at /checkout/src/libstd/sys/unix/backtrace/tracing/gcc_s.rs:49
   1: std::sys_common::backtrace::_print
             at /checkout/src/libstd/sys_common/backtrace.rs:71
   2: std::panicking::default_hook::{{closure}}
             at /checkout/src/libstd/sys_common/backtrace.rs:60
             at /checkout/src/libstd/panicking.rs:355
   3: std::panicking::default_hook
             at /checkout/src/libstd/panicking.rs:371
   4: std::panicking::rust_panic_with_hook
             at /checkout/src/libstd/panicking.rs:549
   5: std::panicking::begin_panic
             at /checkout/src/libstd/panicking.rs:511
   6: std::panicking::begin_panic_fmt
             at /checkout/src/libstd/panicking.rs:495
   7: rust_begin_unwind
             at /checkout/src/libstd/panicking.rs:471
   8: core::panicking::panic_fmt
             at /checkout/src/libcore/panicking.rs:69
   9: core::panicking::panic
             at /checkout/src/libcore/panicking.rs:49
  10: bindgen::ir::comp::Bitfield::mask
             at /home/pi/.cargo/registry/src/git.colasdn.top-1ecc6299db9ec823/bindgen-0.25.3/src/ir/comp.rs:297
  11: <bindgen::ir::comp::Bitfield as bindgen::codegen::FieldCodegen<'a>>::codegen
             at ./target/debug/build/bindgen-bb02d811d9c942d5/out/codegen.rs:3017
  12: <bindgen::ir::comp::BitfieldUnit as bindgen::codegen::FieldCodegen<'a>>::codegen
             at ./target/debug/build/bindgen-bb02d811d9c942d5/out/codegen.rs:2933
  13: <bindgen::ir::comp::Field as bindgen::codegen::FieldCodegen<'a>>::codegen
             at ./target/debug/build/bindgen-bb02d811d9c942d5/out/codegen.rs:2095
  14: <bindgen::ir::comp::CompInfo as bindgen::codegen::CodeGenerator>::codegen
             at ./target/debug/build/bindgen-bb02d811d9c942d5/out/codegen.rs:3525
  15: <bindgen::ir::ty::Type as bindgen::codegen::CodeGenerator>::codegen
             at ./target/debug/build/bindgen-bb02d811d9c942d5/out/codegen.rs:1675
  16: <bindgen::ir::item::Item as bindgen::codegen::CodeGenerator>::codegen
             at ./target/debug/build/bindgen-bb02d811d9c942d5/out/codegen.rs:1465
  17: <bindgen::ir::module::Module as bindgen::codegen::CodeGenerator>::codegen::{{closure}}
             at ./target/debug/build/bindgen-bb02d811d9c942d5/out/codegen.rs:1486
  18: <bindgen::ir::module::Module as bindgen::codegen::CodeGenerator>::codegen
             at ./target/debug/build/bindgen-bb02d811d9c942d5/out/codegen.rs:1510
  19: <bindgen::ir::item::Item as bindgen::codegen::CodeGenerator>::codegen
             at ./target/debug/build/bindgen-bb02d811d9c942d5/out/codegen.rs:1451
  20: bindgen::codegen::codegen::{{closure}}
             at ./target/debug/build/bindgen-bb02d811d9c942d5/out/codegen.rs:5925
  21: bindgen::ir::context::BindgenContext::gen
             at /home/pi/.cargo/registry/src/git.colasdn.top-1ecc6299db9ec823/bindgen-0.25.3/src/ir/context.rs:662
  22: bindgen::codegen::codegen
             at ./target/debug/build/bindgen-bb02d811d9c942d5/out/codegen.rs:5903
  23: bindgen::Bindings::generate
             at /home/pi/.cargo/registry/src/git.colasdn.top-1ecc6299db9ec823/bindgen-0.25.3/src/lib.rs:1075
  24: bindgen::Builder::generate
             at /home/pi/.cargo/registry/src/git.colasdn.top-1ecc6299db9ec823/bindgen-0.25.3/src/lib.rs:778
  25: build_script_build::main
             at ./build.rs:33
  26: __rust_maybe_catch_panic
             at /checkout/src/libpanic_unwind/lib.rs:98
  27: std::rt::lang_start
             at /checkout/src/libstd/panicking.rs:433
             at /checkout/src/libstd/panic.rs:361
             at /checkout/src/libstd/rt.rs:57
  28: main
  29: __libc_start_main

Expected Results

On my 32-bit arm platforms (namely a Raspberry PI, and Beaglebone), I Expect it not to crash when running build program. I found this when working w/ a c-library, and narrowed it down the sys/param.h

There is no crash on 64-bit platforms.

RUST_LOG=bindgen Output

there was no useful output. I pasted everything in the Actual Results section.

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions