Skip to content

Error when using unicode character literals #2475

@paxbun

Description

@paxbun

bindgen panics when it encounters a character literal with a Unicode escape sequence representing a codepoint greater than 128.

Input C/C++ Header

#define OK 'a'
#define PANIC_CHAR_16 u'\uAC00'
#define PANIC_CHAR_32 U'\uAC00'

Bindgen Invocation

$ bindgen input.h -- -x c++
$ cargo run -p bindgen-cli -- input.h -- -x c++

Actual Results

thread 'main' panicked at 'assertion failed: `(left == right)`
  left: `3`,
 right: `1`', /Users/paxbun/.cargo/registry/src/github.com-1ecc6299db9ec823/bindgen-0.60.1/src/ir/var.rs:235:33
stack backtrace:
   0: _rust_begin_unwind
   1: core::panicking::panic_fmt
   2: core::panicking::assert_failed_inner
   3: core::panicking::assert_failed
   4: <bindgen::ir::var::Var as bindgen::parse::ClangSubItemParser>::parse
   5: <bindgen::ir::item::Item as bindgen::parse::ClangItemParser>::parse
   6: bindgen::parse_one
   7: bindgen::clang::visit_children
   8: __ZN5clang8cxcursor13CursorVisitor5VisitE8CXCursorb
   9: __ZN5clang8cxcursor13CursorVisitor25visitPreprocessedEntitiesINS_19PreprocessingRecord8iteratorEEEbT_S5_RS3_NS_6FileIDE
  10: __ZN5clang8cxcursor13CursorVisitor13VisitChildrenE8CXCursor
  11: _clang_visitChildren
  12: clang_sys::clang_visitChildren
  13: bindgen::Builder::generate
  14: std::panicking::try
  15: bindgen::main
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.

Expected Results

/* automatically generated by rust-bindgen 0.64.0 */

pub const OK: u8 = 97u8;
pub const PANIC_CHAR_16: u16 = 44032; // u16 because its counterpart is char16_t
pub const PANIC_CHAR_32: u32 = 44032; // u32 similarly

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions