Skip to content
Merged
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
12 changes: 10 additions & 2 deletions c2rust-transpile/src/translator/pointers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -343,10 +343,18 @@ impl<'c> Translation<'c> {
self.convert_pointer_offset(lhs, rhs, pointee_type_id.ctype, false, deref);

if lrvalue.is_rvalue() {
let source_type_id = if deref {
pointee_type_id
} else {
let pointer_type_id = self
.ast_context
.type_for_kind(&CTypeKind::Pointer(pointee_type_id));
CQualTypeId::new(pointer_type_id)
};
val = self.make_cast(
ctx,
pointee_type_id,
override_ty.unwrap_or(pointee_type_id),
source_type_id,
override_ty.unwrap_or(source_type_id),
val,
)?;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,9 +101,8 @@ pub unsafe extern "C" fn entry() {
as *mut [::core::ffi::c_char; 4];
let mut past_end: *mut ::core::ffi::c_char = (&raw mut static_char_array
as *mut ::core::ffi::c_char)
.offset(::core::mem::size_of::<[::core::ffi::c_char; 9]>() as isize)
as *mut ::core::ffi::c_char;
past_end = static_char_ptr.offset(8 as ::core::ffi::c_int as isize) as *mut ::core::ffi::c_char;
.offset(::core::mem::size_of::<[::core::ffi::c_char; 9]>() as isize);
past_end = static_char_ptr.offset(8 as ::core::ffi::c_int as isize);
}
#[no_mangle]
pub unsafe extern "C" fn short_initializer() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,9 +101,8 @@ pub unsafe extern "C" fn entry() {
as *mut [::core::ffi::c_char; 4];
let mut past_end: *mut ::core::ffi::c_char = (&raw mut static_char_array
as *mut ::core::ffi::c_char)
.offset(::core::mem::size_of::<[::core::ffi::c_char; 9]>() as isize)
as *mut ::core::ffi::c_char;
past_end = static_char_ptr.offset(8 as ::core::ffi::c_int as isize) as *mut ::core::ffi::c_char;
.offset(::core::mem::size_of::<[::core::ffi::c_char; 9]>() as isize);
past_end = static_char_ptr.offset(8 as ::core::ffi::c_int as isize);
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn short_initializer() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,7 @@ pub unsafe extern "C" fn unary_with_side_effect() {
side_effect();
!side_effect();
(side_effect() == 0) as ::core::ffi::c_int;
(b"\0".as_ptr() as *const ::core::ffi::c_char).offset(side_effect() as isize)
as *const ::core::ffi::c_char;
(b"\0".as_ptr() as *const ::core::ffi::c_char).offset(side_effect() as isize);
}
#[no_mangle]
pub unsafe extern "C" fn inc_decl_with_rvalue_side_effect() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,7 @@ pub unsafe extern "C" fn unary_with_side_effect() {
side_effect();
!side_effect();
(side_effect() == 0) as ::core::ffi::c_int;
(b"\0".as_ptr() as *const ::core::ffi::c_char).offset(side_effect() as isize)
as *const ::core::ffi::c_char;
(b"\0".as_ptr() as *const ::core::ffi::c_char).offset(side_effect() as isize);
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn inc_decl_with_rvalue_side_effect() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ pub const STR_CONCATENATION: [::core::ffi::c_char; 18] = unsafe {
pub const REF_MACRO: *const ::core::ffi::c_char = unsafe {
NESTED_STR
.as_ptr()
.offset(LITERAL_FLOAT as ::core::ffi::c_int as isize) as *const ::core::ffi::c_char
.offset(LITERAL_FLOAT as ::core::ffi::c_int as isize)
};
pub const REF_LITERAL: *mut S = &LITERAL_STRUCT as *const S as *mut S;
pub const TERNARY: ::core::ffi::c_int = if LITERAL_BOOL != 0 {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ pub const STR_CONCATENATION: [::core::ffi::c_char; 18] = unsafe {
pub const REF_MACRO: *const ::core::ffi::c_char = unsafe {
NESTED_STR
.as_ptr()
.offset(LITERAL_FLOAT as ::core::ffi::c_int as isize) as *const ::core::ffi::c_char
.offset(LITERAL_FLOAT as ::core::ffi::c_int as isize)
};
pub const REF_LITERAL: *mut S = &LITERAL_STRUCT as *const S as *mut S;
pub const TERNARY: ::core::ffi::c_int = if LITERAL_BOOL != 0 {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,13 +45,12 @@ pub unsafe extern "C" fn VM_CallCompiled(
while arg < MAX_VMMAIN_ARGS {
*(image.offset(
(programStack + 8 as ::core::ffi::c_int + arg * 4 as ::core::ffi::c_int) as isize,
) as *mut byte as *mut ::core::ffi::c_int) = *args.offset(arg as isize);
) as *mut ::core::ffi::c_int) = *args.offset(arg as isize);
arg += 1;
}
*(image.offset((programStack + 4 as ::core::ffi::c_int) as isize) as *mut byte
as *mut ::core::ffi::c_int) = 0 as ::core::ffi::c_int;
*(image.offset(programStack as isize) as *mut byte as *mut ::core::ffi::c_int) =
-1 as ::core::ffi::c_int;
*(image.offset((programStack + 4 as ::core::ffi::c_int) as isize) as *mut ::core::ffi::c_int) =
0 as ::core::ffi::c_int;
*(image.offset(programStack as isize) as *mut ::core::ffi::c_int) = -1 as ::core::ffi::c_int;
entryPoint = (*vm).codeBase.offset((*vm).entryOfs as isize);
opStack = (&raw mut stack as *mut byte as *mut ::core::ffi::c_int)
.offset(16 as ::core::ffi::c_int as isize);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,13 +46,12 @@ pub unsafe extern "C" fn VM_CallCompiled(
while arg < MAX_VMMAIN_ARGS {
*(image.offset(
(programStack + 8 as ::core::ffi::c_int + arg * 4 as ::core::ffi::c_int) as isize,
) as *mut byte as *mut ::core::ffi::c_int) = *args.offset(arg as isize);
) as *mut ::core::ffi::c_int) = *args.offset(arg as isize);
arg += 1;
}
*(image.offset((programStack + 4 as ::core::ffi::c_int) as isize) as *mut byte
as *mut ::core::ffi::c_int) = 0 as ::core::ffi::c_int;
*(image.offset(programStack as isize) as *mut byte as *mut ::core::ffi::c_int) =
-1 as ::core::ffi::c_int;
*(image.offset((programStack + 4 as ::core::ffi::c_int) as isize) as *mut ::core::ffi::c_int) =
0 as ::core::ffi::c_int;
*(image.offset(programStack as isize) as *mut ::core::ffi::c_int) = -1 as ::core::ffi::c_int;
entryPoint = (*vm).codeBase.offset((*vm).entryOfs as isize);
opStack = (&raw mut stack as *mut byte as *mut ::core::ffi::c_int)
.offset(16 as ::core::ffi::c_int as isize);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,13 +45,12 @@ pub unsafe extern "C" fn VM_CallCompiled(
while arg < MAX_VMMAIN_ARGS {
*(image.offset(
(programStack + 8 as ::core::ffi::c_int + arg * 4 as ::core::ffi::c_int) as isize,
) as *mut byte as *mut ::core::ffi::c_int) = *args.offset(arg as isize);
) as *mut ::core::ffi::c_int) = *args.offset(arg as isize);
arg += 1;
}
*(image.offset((programStack + 4 as ::core::ffi::c_int) as isize) as *mut byte
as *mut ::core::ffi::c_int) = 0 as ::core::ffi::c_int;
*(image.offset(programStack as isize) as *mut byte as *mut ::core::ffi::c_int) =
-1 as ::core::ffi::c_int;
*(image.offset((programStack + 4 as ::core::ffi::c_int) as isize) as *mut ::core::ffi::c_int) =
0 as ::core::ffi::c_int;
*(image.offset(programStack as isize) as *mut ::core::ffi::c_int) = -1 as ::core::ffi::c_int;
entryPoint = (*vm).codeBase.offset((*vm).entryOfs as isize);
opStack = (&raw mut stack as *mut byte as *mut ::core::ffi::c_int)
.offset(16 as ::core::ffi::c_int as isize);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,13 +46,12 @@ pub unsafe extern "C" fn VM_CallCompiled(
while arg < MAX_VMMAIN_ARGS {
*(image.offset(
(programStack + 8 as ::core::ffi::c_int + arg * 4 as ::core::ffi::c_int) as isize,
) as *mut byte as *mut ::core::ffi::c_int) = *args.offset(arg as isize);
) as *mut ::core::ffi::c_int) = *args.offset(arg as isize);
arg += 1;
}
*(image.offset((programStack + 4 as ::core::ffi::c_int) as isize) as *mut byte
as *mut ::core::ffi::c_int) = 0 as ::core::ffi::c_int;
*(image.offset(programStack as isize) as *mut byte as *mut ::core::ffi::c_int) =
-1 as ::core::ffi::c_int;
*(image.offset((programStack + 4 as ::core::ffi::c_int) as isize) as *mut ::core::ffi::c_int) =
0 as ::core::ffi::c_int;
*(image.offset(programStack as isize) as *mut ::core::ffi::c_int) = -1 as ::core::ffi::c_int;
entryPoint = (*vm).codeBase.offset((*vm).entryOfs as isize);
opStack = (&raw mut stack as *mut byte as *mut ::core::ffi::c_int)
.offset(16 as ::core::ffi::c_int as isize);
Expand Down
Loading