Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion .github/workflows/internal-testsuite.yml
Original file line number Diff line number Diff line change
Expand Up @@ -114,11 +114,17 @@ jobs:
export LLVM_CONFIG_PATH=/usr/bin/llvm-config-${{ matrix.clang-version }}
cargo build --release

- name: Build tools
run: |
# `cd tools` to pick up `tools/rust-toolchain.toml` (stable, for `edition = "2024"`)
(cd tools && cargo build --release --manifest-path split_rust/Cargo.toml)
(cd tools && cargo build --release --manifest-path merge_rust/Cargo.toml)

# TODO(pl): figure out why compile_commands.json may cause json-c to fail
- name: Run c2rust testsuite
run: |
find tests/integration -type f -name compile_commands.json -delete
export PATH=$PWD/target/release:$HOME/.local/bin:$PATH
export PATH=$PWD/target/release:$PWD/c2rust-postprocess:$HOME/.local/bin:$PATH
echo "PATH=$PATH"
export C2RUST_DIR=$PWD
# Needs to be run from `tests/integration/` (or further inside)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@ response = """#[no_mangle]

pub unsafe extern "C" fn _json_c_set_last_err(
mut err_fmt: *const ::core::ffi::c_char,
mut args: ...
mut c2rust_args: ...
) {
let mut ap: ::core::ffi::VaListImpl;
ap = args.clone();
ap = c2rust_args.clone();
// Ignore (attempted) overruns from snprintf
vsnprintf(
&raw mut _last_err as *mut ::core::ffi::c_char,
Expand Down Expand Up @@ -42,10 +42,10 @@ Rust function:

pub unsafe extern "C" fn _json_c_set_last_err(
mut err_fmt: *const ::core::ffi::c_char,
mut args: ...
mut c2rust_args: ...
) {
let mut ap: ::core::ffi::VaListImpl;
ap = args.clone();
ap = c2rust_args.clone();
vsnprintf(
&raw mut _last_err as *mut ::core::ffi::c_char,
::core::mem::size_of::<[::core::ffi::c_char; 256]>() as size_t,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@

pub unsafe extern "C" fn _json_c_set_last_err(
mut err_fmt: *const ::core::ffi::c_char,
mut args: ...
mut c2rust_args: ...
) {
let mut ap: ::core::ffi::VaListImpl;
ap = args.clone();
ap = c2rust_args.clone();
// Ignore (attempted) overruns from snprintf
vsnprintf(
&raw mut _last_err as *mut ::core::ffi::c_char,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,14 @@ unsafe extern "C" fn _json_c_visit(
);
match userret {
crate::src::json_visit::JSON_C_VISIT_RETURN_CONTINUE => {}
crate::src::json_visit::JSON_C_VISIT_RETURN_SKIP
| crate::src::json_visit::JSON_C_VISIT_RETURN_POP
| crate::src::json_visit::JSON_C_VISIT_RETURN_STOP
| crate::src::json_visit::JSON_C_VISIT_RETURN_ERROR => return userret,
crate::src::json_visit::JSON_C_VISIT_RETURN_SKIP |
crate::src::json_visit::JSON_C_VISIT_RETURN_POP |
crate::src::json_visit::JSON_C_VISIT_RETURN_STOP |
crate::src::json_visit::JSON_C_VISIT_RETURN_ERROR => return userret,
_ => {
fprintf(
stderr,
b"ERROR: invalid return value from json_c_visit userfunc: %d\\n\\0" as *const u8
b"ERROR: invalid return value from json_c_visit userfunc: %d\\n\\0".as_ptr()
as *const ::core::ffi::c_char,
userret,
);
Expand All @@ -42,15 +42,15 @@ unsafe extern "C" fn _json_c_visit(
4 => {
let mut key: *mut ::core::ffi::c_char = ::core::ptr::null_mut::<::core::ffi::c_char>();
let mut child: *mut json_object = ::core::ptr::null_mut::<json_object>();
let mut entrykey: *mut lh_entry =
(*(json_object_get_object(jso) as *mut lh_table)).head;
let mut entrykey: *mut lh_entry = (*(json_object_get_object(jso) as
*mut lh_table)).head;
let mut entry_nextkey: *mut lh_entry = ::core::ptr::null_mut::<lh_entry>();
while !({
if !entrykey.is_null() {
key = (*entrykey).k as uintptr_t as *mut ::core::ffi::c_void
as *mut ::core::ffi::c_char;
child = (*entrykey).v as uintptr_t as *mut ::core::ffi::c_void
as *mut json_object;
child =
(*entrykey).v as uintptr_t as *mut ::core::ffi::c_void as *mut json_object;
entry_nextkey = (*entrykey).next;
}
entrykey
Expand All @@ -68,17 +68,13 @@ unsafe extern "C" fn _json_c_visit(
if userret == crate::src::json_visit::JSON_C_VISIT_RETURN_POP {
break;
}
if userret == crate::src::json_visit::JSON_C_VISIT_RETURN_STOP
|| userret == crate::src::json_visit::JSON_C_VISIT_RETURN_ERROR
{
if userret == crate::src::json_visit::JSON_C_VISIT_RETURN_STOP || userret == crate::src::json_visit::JSON_C_VISIT_RETURN_ERROR {
return userret;
}
if userret != crate::src::json_visit::JSON_C_VISIT_RETURN_CONTINUE
&& userret != crate::src::json_visit::JSON_C_VISIT_RETURN_SKIP
{
if userret != crate::src::json_visit::JSON_C_VISIT_RETURN_CONTINUE && userret != crate::src::json_visit::JSON_C_VISIT_RETURN_SKIP {
fprintf(
stderr,
b"INTERNAL ERROR: _json_c_visit returned %d\\n\\0" as *const u8
b"INTERNAL ERROR: _json_c_visit returned %d\\n\\0".as_ptr()
as *const ::core::ffi::c_char,
userret,
);
Expand All @@ -105,17 +101,13 @@ unsafe extern "C" fn _json_c_visit(
if userret == crate::src::json_visit::JSON_C_VISIT_RETURN_POP {
break;
}
if userret == crate::src::json_visit::JSON_C_VISIT_RETURN_STOP
|| userret == crate::src::json_visit::JSON_C_VISIT_RETURN_ERROR
{
if userret == crate::src::json_visit::JSON_C_VISIT_RETURN_STOP || userret == crate::src::json_visit::JSON_C_VISIT_RETURN_ERROR {
return userret;
}
if userret != crate::src::json_visit::JSON_C_VISIT_RETURN_CONTINUE
&& userret != crate::src::json_visit::JSON_C_VISIT_RETURN_SKIP
{
if userret != crate::src::json_visit::JSON_C_VISIT_RETURN_CONTINUE && userret != crate::src::json_visit::JSON_C_VISIT_RETURN_SKIP {
fprintf(
stderr,
b"INTERNAL ERROR: _json_c_visit returned %d\\n\\0" as *const u8
b"INTERNAL ERROR: _json_c_visit returned %d\\n\\0".as_ptr()
as *const ::core::ffi::c_char,
userret,
);
Expand All @@ -127,7 +119,7 @@ unsafe extern "C" fn _json_c_visit(
_ => {
fprintf(
stderr,
b"INTERNAL ERROR: _json_c_visit found object of unknown type: %d\\n\\0" as *const u8
b"INTERNAL ERROR: _json_c_visit found object of unknown type: %d\\n\\0".as_ptr()
as *const ::core::ffi::c_char,
json_object_get_type(jso) as ::core::ffi::c_uint,
);
Expand All @@ -148,26 +140,26 @@ unsafe extern "C" fn _json_c_visit(
userarg,
);
match userret {
crate::src::json_visit::JSON_C_VISIT_RETURN_SKIP
| crate::src::json_visit::JSON_C_VISIT_RETURN_POP
| crate::src::json_visit::JSON_C_VISIT_RETURN_CONTINUE => {
// These are not really sensible during JSON_C_VISIT_SECOND,
crate::src::json_visit::JSON_C_VISIT_RETURN_SKIP |
crate::src::json_visit::JSON_C_VISIT_RETURN_POP |
crate::src::json_visit::JSON_C_VISIT_RETURN_CONTINUE => {
// These are not really sensible during JSON_C_VISIT_SECOND,
// but map them to JSON_C_VISIT_CONTINUE anyway.
// FALLTHROUGH
return crate::src::json_visit::JSON_C_VISIT_RETURN_CONTINUE;
}
crate::src::json_visit::JSON_C_VISIT_RETURN_STOP
| crate::src::json_visit::JSON_C_VISIT_RETURN_ERROR => return userret,
crate::src::json_visit::JSON_C_VISIT_RETURN_STOP |
crate::src::json_visit::JSON_C_VISIT_RETURN_ERROR => return userret,
_ => {
fprintf(
stderr,
b"ERROR: invalid return value from json_c_visit userfunc: %d\\n\\0" as *const u8
b"ERROR: invalid return value from json_c_visit userfunc: %d\\n\\0".as_ptr()
as *const ::core::ffi::c_char,
userret,
);
return crate::src::json_visit::JSON_C_VISIT_RETURN_ERROR;
}
};
}
// NOTREACHED
}
```"""
Expand Down Expand Up @@ -307,7 +299,7 @@ unsafe extern "C" fn _json_c_visit(
_ => {
fprintf(
stderr,
b"ERROR: invalid return value from json_c_visit userfunc: %d\\n\\0" as *const u8
b"ERROR: invalid return value from json_c_visit userfunc: %d\\n\\0".as_ptr()
as *const ::core::ffi::c_char,
userret,
);
Expand Down Expand Up @@ -351,7 +343,7 @@ unsafe extern "C" fn _json_c_visit(
if userret != crate::src::json_visit::JSON_C_VISIT_RETURN_CONTINUE && userret != crate::src::json_visit::JSON_C_VISIT_RETURN_SKIP {
fprintf(
stderr,
b"INTERNAL ERROR: _json_c_visit returned %d\\n\\0" as *const u8
b"INTERNAL ERROR: _json_c_visit returned %d\\n\\0".as_ptr()
as *const ::core::ffi::c_char,
userret,
);
Expand Down Expand Up @@ -384,7 +376,7 @@ unsafe extern "C" fn _json_c_visit(
if userret != crate::src::json_visit::JSON_C_VISIT_RETURN_CONTINUE && userret != crate::src::json_visit::JSON_C_VISIT_RETURN_SKIP {
fprintf(
stderr,
b"INTERNAL ERROR: _json_c_visit returned %d\\n\\0" as *const u8
b"INTERNAL ERROR: _json_c_visit returned %d\\n\\0".as_ptr()
as *const ::core::ffi::c_char,
userret,
);
Expand All @@ -396,7 +388,7 @@ unsafe extern "C" fn _json_c_visit(
_ => {
fprintf(
stderr,
b"INTERNAL ERROR: _json_c_visit found object of unknown type: %d\\n\\0" as *const u8
b"INTERNAL ERROR: _json_c_visit found object of unknown type: %d\\n\\0".as_ptr()
as *const ::core::ffi::c_char,
json_object_get_type(jso) as ::core::ffi::c_uint,
);
Expand All @@ -422,7 +414,7 @@ unsafe extern "C" fn _json_c_visit(
_ => {
fprintf(
stderr,
b"ERROR: invalid return value from json_c_visit userfunc: %d\\n\\0" as *const u8
b"ERROR: invalid return value from json_c_visit userfunc: %d\\n\\0".as_ptr()
as *const ::core::ffi::c_char,
userret,
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,14 @@ unsafe extern "C" fn _json_c_visit(
);
match userret {
crate::src::json_visit::JSON_C_VISIT_RETURN_CONTINUE => {}
crate::src::json_visit::JSON_C_VISIT_RETURN_SKIP
| crate::src::json_visit::JSON_C_VISIT_RETURN_POP
| crate::src::json_visit::JSON_C_VISIT_RETURN_STOP
| crate::src::json_visit::JSON_C_VISIT_RETURN_ERROR => return userret,
crate::src::json_visit::JSON_C_VISIT_RETURN_SKIP |
crate::src::json_visit::JSON_C_VISIT_RETURN_POP |
crate::src::json_visit::JSON_C_VISIT_RETURN_STOP |
crate::src::json_visit::JSON_C_VISIT_RETURN_ERROR => return userret,
_ => {
fprintf(
stderr,
b"ERROR: invalid return value from json_c_visit userfunc: %d\n\0" as *const u8
b"ERROR: invalid return value from json_c_visit userfunc: %d\n\0".as_ptr()
as *const ::core::ffi::c_char,
userret,
);
Expand All @@ -39,15 +39,15 @@ unsafe extern "C" fn _json_c_visit(
4 => {
let mut key: *mut ::core::ffi::c_char = ::core::ptr::null_mut::<::core::ffi::c_char>();
let mut child: *mut json_object = ::core::ptr::null_mut::<json_object>();
let mut entrykey: *mut lh_entry =
(*(json_object_get_object(jso) as *mut lh_table)).head;
let mut entrykey: *mut lh_entry = (*(json_object_get_object(jso) as
*mut lh_table)).head;
let mut entry_nextkey: *mut lh_entry = ::core::ptr::null_mut::<lh_entry>();
while !({
if !entrykey.is_null() {
key = (*entrykey).k as uintptr_t as *mut ::core::ffi::c_void
as *mut ::core::ffi::c_char;
child = (*entrykey).v as uintptr_t as *mut ::core::ffi::c_void
as *mut json_object;
child =
(*entrykey).v as uintptr_t as *mut ::core::ffi::c_void as *mut json_object;
entry_nextkey = (*entrykey).next;
}
entrykey
Expand All @@ -65,17 +65,13 @@ unsafe extern "C" fn _json_c_visit(
if userret == crate::src::json_visit::JSON_C_VISIT_RETURN_POP {
break;
}
if userret == crate::src::json_visit::JSON_C_VISIT_RETURN_STOP
|| userret == crate::src::json_visit::JSON_C_VISIT_RETURN_ERROR
{
if userret == crate::src::json_visit::JSON_C_VISIT_RETURN_STOP || userret == crate::src::json_visit::JSON_C_VISIT_RETURN_ERROR {
return userret;
}
if userret != crate::src::json_visit::JSON_C_VISIT_RETURN_CONTINUE
&& userret != crate::src::json_visit::JSON_C_VISIT_RETURN_SKIP
{
if userret != crate::src::json_visit::JSON_C_VISIT_RETURN_CONTINUE && userret != crate::src::json_visit::JSON_C_VISIT_RETURN_SKIP {
fprintf(
stderr,
b"INTERNAL ERROR: _json_c_visit returned %d\n\0" as *const u8
b"INTERNAL ERROR: _json_c_visit returned %d\n\0".as_ptr()
as *const ::core::ffi::c_char,
userret,
);
Expand All @@ -102,17 +98,13 @@ unsafe extern "C" fn _json_c_visit(
if userret == crate::src::json_visit::JSON_C_VISIT_RETURN_POP {
break;
}
if userret == crate::src::json_visit::JSON_C_VISIT_RETURN_STOP
|| userret == crate::src::json_visit::JSON_C_VISIT_RETURN_ERROR
{
if userret == crate::src::json_visit::JSON_C_VISIT_RETURN_STOP || userret == crate::src::json_visit::JSON_C_VISIT_RETURN_ERROR {
return userret;
}
if userret != crate::src::json_visit::JSON_C_VISIT_RETURN_CONTINUE
&& userret != crate::src::json_visit::JSON_C_VISIT_RETURN_SKIP
{
if userret != crate::src::json_visit::JSON_C_VISIT_RETURN_CONTINUE && userret != crate::src::json_visit::JSON_C_VISIT_RETURN_SKIP {
fprintf(
stderr,
b"INTERNAL ERROR: _json_c_visit returned %d\n\0" as *const u8
b"INTERNAL ERROR: _json_c_visit returned %d\n\0".as_ptr()
as *const ::core::ffi::c_char,
userret,
);
Expand All @@ -124,7 +116,7 @@ unsafe extern "C" fn _json_c_visit(
_ => {
fprintf(
stderr,
b"INTERNAL ERROR: _json_c_visit found object of unknown type: %d\n\0" as *const u8
b"INTERNAL ERROR: _json_c_visit found object of unknown type: %d\n\0".as_ptr()
as *const ::core::ffi::c_char,
json_object_get_type(jso) as ::core::ffi::c_uint,
);
Expand All @@ -145,26 +137,26 @@ unsafe extern "C" fn _json_c_visit(
userarg,
);
match userret {
crate::src::json_visit::JSON_C_VISIT_RETURN_SKIP
| crate::src::json_visit::JSON_C_VISIT_RETURN_POP
| crate::src::json_visit::JSON_C_VISIT_RETURN_CONTINUE => {
// These are not really sensible during JSON_C_VISIT_SECOND,
crate::src::json_visit::JSON_C_VISIT_RETURN_SKIP |
crate::src::json_visit::JSON_C_VISIT_RETURN_POP |
crate::src::json_visit::JSON_C_VISIT_RETURN_CONTINUE => {
// These are not really sensible during JSON_C_VISIT_SECOND,
// but map them to JSON_C_VISIT_CONTINUE anyway.
// FALLTHROUGH
return crate::src::json_visit::JSON_C_VISIT_RETURN_CONTINUE;
}
crate::src::json_visit::JSON_C_VISIT_RETURN_STOP
| crate::src::json_visit::JSON_C_VISIT_RETURN_ERROR => return userret,
crate::src::json_visit::JSON_C_VISIT_RETURN_STOP |
crate::src::json_visit::JSON_C_VISIT_RETURN_ERROR => return userret,
_ => {
fprintf(
stderr,
b"ERROR: invalid return value from json_c_visit userfunc: %d\n\0" as *const u8
b"ERROR: invalid return value from json_c_visit userfunc: %d\n\0".as_ptr()
as *const ::core::ffi::c_char,
userret,
);
return crate::src::json_visit::JSON_C_VISIT_RETURN_ERROR;
}
};
}
// NOTREACHED
}
```
Loading
Loading