diff --git a/src/bindgen/ir/constant.rs b/src/bindgen/ir/constant.rs index 67d0bf79..9c7a1401 100644 --- a/src/bindgen/ir/constant.rs +++ b/src/bindgen/ir/constant.rs @@ -163,7 +163,11 @@ impl Literal { other_code => format!(r"L'\U{:08X}'", other_code), })), syn::Lit::Int(ref value) => { - Ok(Literal::Expr(value.base10_digits().to_string())) + if value.base10_parse::().is_err() { + Ok(Literal::Expr(format!("{}ULL", value.base10_digits()))) + } else { + Ok(Literal::Expr(value.base10_digits().to_string())) + } } syn::Lit::Float(ref value) => { Ok(Literal::Expr(value.base10_digits().to_string())) diff --git a/tests/expectations/both/constant_big.c b/tests/expectations/both/constant_big.c new file mode 100644 index 00000000..469bf315 --- /dev/null +++ b/tests/expectations/both/constant_big.c @@ -0,0 +1,12 @@ +#include +#include +#include +#include + +#define SIGNED_DOESNT_NEED_ULL_SUFFIX -9223372036854775807 + +#define SIGNED_NEEDS_ULL_SUFFIX -9223372036854775808ULL + +#define UNSIGNED_DOESNT_NEED_ULL_SUFFIX 8070450532247928832 + +#define UNSIGNED_NEEDS_ULL_SUFFIX 9223372036854775808ULL diff --git a/tests/expectations/both/constant_big.compat.c b/tests/expectations/both/constant_big.compat.c new file mode 100644 index 00000000..469bf315 --- /dev/null +++ b/tests/expectations/both/constant_big.compat.c @@ -0,0 +1,12 @@ +#include +#include +#include +#include + +#define SIGNED_DOESNT_NEED_ULL_SUFFIX -9223372036854775807 + +#define SIGNED_NEEDS_ULL_SUFFIX -9223372036854775808ULL + +#define UNSIGNED_DOESNT_NEED_ULL_SUFFIX 8070450532247928832 + +#define UNSIGNED_NEEDS_ULL_SUFFIX 9223372036854775808ULL diff --git a/tests/expectations/constant_big.c b/tests/expectations/constant_big.c new file mode 100644 index 00000000..469bf315 --- /dev/null +++ b/tests/expectations/constant_big.c @@ -0,0 +1,12 @@ +#include +#include +#include +#include + +#define SIGNED_DOESNT_NEED_ULL_SUFFIX -9223372036854775807 + +#define SIGNED_NEEDS_ULL_SUFFIX -9223372036854775808ULL + +#define UNSIGNED_DOESNT_NEED_ULL_SUFFIX 8070450532247928832 + +#define UNSIGNED_NEEDS_ULL_SUFFIX 9223372036854775808ULL diff --git a/tests/expectations/constant_big.compat.c b/tests/expectations/constant_big.compat.c new file mode 100644 index 00000000..469bf315 --- /dev/null +++ b/tests/expectations/constant_big.compat.c @@ -0,0 +1,12 @@ +#include +#include +#include +#include + +#define SIGNED_DOESNT_NEED_ULL_SUFFIX -9223372036854775807 + +#define SIGNED_NEEDS_ULL_SUFFIX -9223372036854775808ULL + +#define UNSIGNED_DOESNT_NEED_ULL_SUFFIX 8070450532247928832 + +#define UNSIGNED_NEEDS_ULL_SUFFIX 9223372036854775808ULL diff --git a/tests/expectations/constant_big.cpp b/tests/expectations/constant_big.cpp new file mode 100644 index 00000000..e52f8f3e --- /dev/null +++ b/tests/expectations/constant_big.cpp @@ -0,0 +1,12 @@ +#include +#include +#include +#include + +static const int64_t SIGNED_DOESNT_NEED_ULL_SUFFIX = -9223372036854775807; + +static const int64_t SIGNED_NEEDS_ULL_SUFFIX = -9223372036854775808ULL; + +static const uint64_t UNSIGNED_DOESNT_NEED_ULL_SUFFIX = 8070450532247928832; + +static const uint64_t UNSIGNED_NEEDS_ULL_SUFFIX = 9223372036854775808ULL; diff --git a/tests/expectations/tag/constant_big.c b/tests/expectations/tag/constant_big.c new file mode 100644 index 00000000..469bf315 --- /dev/null +++ b/tests/expectations/tag/constant_big.c @@ -0,0 +1,12 @@ +#include +#include +#include +#include + +#define SIGNED_DOESNT_NEED_ULL_SUFFIX -9223372036854775807 + +#define SIGNED_NEEDS_ULL_SUFFIX -9223372036854775808ULL + +#define UNSIGNED_DOESNT_NEED_ULL_SUFFIX 8070450532247928832 + +#define UNSIGNED_NEEDS_ULL_SUFFIX 9223372036854775808ULL diff --git a/tests/expectations/tag/constant_big.compat.c b/tests/expectations/tag/constant_big.compat.c new file mode 100644 index 00000000..469bf315 --- /dev/null +++ b/tests/expectations/tag/constant_big.compat.c @@ -0,0 +1,12 @@ +#include +#include +#include +#include + +#define SIGNED_DOESNT_NEED_ULL_SUFFIX -9223372036854775807 + +#define SIGNED_NEEDS_ULL_SUFFIX -9223372036854775808ULL + +#define UNSIGNED_DOESNT_NEED_ULL_SUFFIX 8070450532247928832 + +#define UNSIGNED_NEEDS_ULL_SUFFIX 9223372036854775808ULL diff --git a/tests/rust/constant_big.rs b/tests/rust/constant_big.rs new file mode 100644 index 00000000..94eb834f --- /dev/null +++ b/tests/rust/constant_big.rs @@ -0,0 +1,8 @@ +pub const UNSIGNED_NEEDS_ULL_SUFFIX: u64 = 0x8000_0000_0000_0000; +pub const UNSIGNED_DOESNT_NEED_ULL_SUFFIX: u64 = 0x7000_0000_0000_0000; + +// i64::min_value() +pub const SIGNED_NEEDS_ULL_SUFFIX: i64 = -9223372036854775808; + +// i64::min_value() + 1 +pub const SIGNED_DOESNT_NEED_ULL_SUFFIX: i64 = -9223372036854775807;