From e9d2c12182475c9cb6a8b75865e5f45c8dfd8e03 Mon Sep 17 00:00:00 2001 From: Khyber Sen Date: Mon, 27 Oct 2025 22:31:53 -0700 Subject: [PATCH 1/2] transpile: tests: add `out_of_range_int.c` test for an `int32_t` that is 2^31 This is from `libmcs` and is currently broken. --- .../tests/snapshots/out_of_range_int.c | 7 +++++++ ...apshots__transpile@out_of_range_int.c.snap | 21 +++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 c2rust-transpile/tests/snapshots/out_of_range_int.c create mode 100644 c2rust-transpile/tests/snapshots/snapshots__transpile@out_of_range_int.c.snap diff --git a/c2rust-transpile/tests/snapshots/out_of_range_int.c b/c2rust-transpile/tests/snapshots/out_of_range_int.c new file mode 100644 index 0000000000..5f61580d71 --- /dev/null +++ b/c2rust-transpile/tests/snapshots/out_of_range_int.c @@ -0,0 +1,7 @@ +#include + +void f() { + int32_t a = 0x80000000U; + int32_t b = 0x80000000; + int32_t c = 0x8000000000000000; +} diff --git a/c2rust-transpile/tests/snapshots/snapshots__transpile@out_of_range_int.c.snap b/c2rust-transpile/tests/snapshots/snapshots__transpile@out_of_range_int.c.snap new file mode 100644 index 0000000000..2faaf7d6bd --- /dev/null +++ b/c2rust-transpile/tests/snapshots/snapshots__transpile@out_of_range_int.c.snap @@ -0,0 +1,21 @@ +--- +source: c2rust-transpile/tests/snapshots.rs +expression: cat tests/snapshots/out_of_range_int.rs +input_file: c2rust-transpile/tests/snapshots/out_of_range_int.c +--- +#![allow( + dead_code, + non_camel_case_types, + non_snake_case, + non_upper_case_globals, + unused_assignments, + unused_mut +)] +pub type __int32_t = i32; +pub type int32_t = __int32_t; +#[no_mangle] +pub unsafe extern "C" fn f() { + let mut a: int32_t = 0x80000000 as int32_t; + let mut b: int32_t = 0x80000000 as int32_t; + let mut c: int32_t = 0x8000000000000000 as int32_t; +} From d1799d6afeff4c2c64c8895b103f270389006132 Mon Sep 17 00:00:00 2001 From: Khyber Sen Date: Mon, 27 Oct 2025 22:49:21 -0700 Subject: [PATCH 2/2] transpile: tests: `out_of_range_int.c` before #1266 --- .../snapshots__transpile@out_of_range_int.c.snap | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/c2rust-transpile/tests/snapshots/snapshots__transpile@out_of_range_int.c.snap b/c2rust-transpile/tests/snapshots/snapshots__transpile@out_of_range_int.c.snap index 2faaf7d6bd..9324f5a55f 100644 --- a/c2rust-transpile/tests/snapshots/snapshots__transpile@out_of_range_int.c.snap +++ b/c2rust-transpile/tests/snapshots/snapshots__transpile@out_of_range_int.c.snap @@ -5,17 +5,18 @@ input_file: c2rust-transpile/tests/snapshots/out_of_range_int.c --- #![allow( dead_code, + mutable_transmutes, non_camel_case_types, non_snake_case, non_upper_case_globals, unused_assignments, unused_mut )] -pub type __int32_t = i32; +pub type __int32_t = std::ffi::c_int; pub type int32_t = __int32_t; #[no_mangle] pub unsafe extern "C" fn f() { - let mut a: int32_t = 0x80000000 as int32_t; - let mut b: int32_t = 0x80000000 as int32_t; - let mut c: int32_t = 0x8000000000000000 as int32_t; + let mut a: int32_t = 0x80000000 as std::ffi::c_uint as int32_t; + let mut b: int32_t = 0x80000000 as std::ffi::c_uint as int32_t; + let mut c: int32_t = 0x8000000000000000 as std::ffi::c_ulong as int32_t; }