rust-lang / rust-lang/rust-bindgen

Macro defining a constant with unsigned long suffix generates unsigned integer

Open
#923 10 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

enhancement
Dominant language
Rust
Stars
5.3k
Forks
829
Avg merge
1d 1h
Merged PRs (30d)
15

Description

Input C/C++ Header
#define CK_INVALID_HANDLE	(0UL)
Bindgen Invocation
bindgen::Builder::default()
    .header("input.h")
    .generate()
    .expect("Unable to generate bindings");
Actual Results
pub const CK_INVALID_HANDLE: ::std::os::raw::c_uint = 0;
Expected Results
pub const CK_INVALID_HANDLE: ::std::os::raw::c_ulong = 0;

The U (unsigned) prefix is taken into account, but not the L (long) one.
This causes types and casts problems.

Debugging logs:
bindgen.txt

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

The reproducer is the C/C++ header macro #define CK_INVALID_HANDLE (0UL) and the bindgen Builder invocation in the issue; begin by running that input through bindgen and tracing how the generated constant type is chosen. Done means the generated declaration uses ::std::os::raw::c_ulong while preserving the existing value.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp, rust
Domain
tooling
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Clearly specified
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.