Skip to content

Commit cb6991f

Browse files
committed
transpile: Add conditional operators to conditions.c snapshot test
1 parent 004d4d1 commit cb6991f

3 files changed

Lines changed: 178 additions & 0 deletions

File tree

c2rust-transpile/tests/snapshots/conditions.c

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,3 +83,22 @@ int nested_early_returns(int x) {
8383
}
8484
return x;
8585
}
86+
87+
void conditional_operator(const unsigned sz, int buf[const]) {
88+
int *x = &buf[0], *y = &buf[1];
89+
*(0 ? &y : &x) = (int *) 10;
90+
91+
buf[2] = 1 ? 2 : 3;
92+
buf[3] = 0 ? 2 : 3;
93+
}
94+
95+
static int id(int i) { return i;}
96+
static int add(int *p, int i, int r) { *p += i; return r;}
97+
98+
void binary_conditional_operator(const unsigned sz, int buf[const]) {
99+
buf[0] = id(0) ?: id(1);
100+
buf[1] = id(2) ?: id(3);
101+
102+
(void) (add(buf+2, 2, 0) ?: add(buf+3, 3, 0));
103+
(void) (add(buf+4, 4, 1) ?: add(buf+5, 5, 0));
104+
}

c2rust-transpile/tests/snapshots/snapshots__transpile@conditions.c.2021.snap

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ expression: cat tests/snapshots/conditions.2021.rs
1010
unused_assignments,
1111
unused_mut
1212
)]
13+
#![feature(raw_ref_op)]
1314
#[no_mangle]
1415
pub unsafe extern "C" fn simple_if_else(mut x: ::core::ffi::c_int) -> ::core::ffi::c_int {
1516
if x != 0 {
@@ -91,3 +92,82 @@ pub unsafe extern "C" fn nested_early_returns(mut x: ::core::ffi::c_int) -> ::co
9192
}
9293
return x;
9394
}
95+
#[no_mangle]
96+
pub unsafe extern "C" fn conditional_operator(
97+
sz: ::core::ffi::c_uint,
98+
buf: *mut ::core::ffi::c_int,
99+
) {
100+
let mut x: *mut ::core::ffi::c_int = (buf as *mut ::core::ffi::c_int)
101+
.offset(0 as ::core::ffi::c_int as isize)
102+
as *mut ::core::ffi::c_int;
103+
let mut y: *mut ::core::ffi::c_int = (buf as *mut ::core::ffi::c_int)
104+
.offset(1 as ::core::ffi::c_int as isize)
105+
as *mut ::core::ffi::c_int;
106+
let ref mut c2rust_fresh0 = *if false { &raw mut y } else { &raw mut x };
107+
*c2rust_fresh0 = 10 as ::core::ffi::c_int as *mut ::core::ffi::c_int;
108+
*(buf as *mut ::core::ffi::c_int).offset(2 as ::core::ffi::c_int as isize) = if true {
109+
2 as ::core::ffi::c_int
110+
} else {
111+
3 as ::core::ffi::c_int
112+
};
113+
*(buf as *mut ::core::ffi::c_int).offset(3 as ::core::ffi::c_int as isize) = if false {
114+
2 as ::core::ffi::c_int
115+
} else {
116+
3 as ::core::ffi::c_int
117+
};
118+
}
119+
unsafe extern "C" fn id(mut i: ::core::ffi::c_int) -> ::core::ffi::c_int {
120+
return i;
121+
}
122+
unsafe extern "C" fn add(
123+
mut p: *mut ::core::ffi::c_int,
124+
mut i: ::core::ffi::c_int,
125+
mut r: ::core::ffi::c_int,
126+
) -> ::core::ffi::c_int {
127+
*p += i;
128+
return r;
129+
}
130+
#[no_mangle]
131+
pub unsafe extern "C" fn binary_conditional_operator(
132+
sz: ::core::ffi::c_uint,
133+
buf: *mut ::core::ffi::c_int,
134+
) {
135+
let ref mut c2rust_fresh1 = id(0 as ::core::ffi::c_int);
136+
*(buf as *mut ::core::ffi::c_int).offset(0 as ::core::ffi::c_int as isize) =
137+
if *c2rust_fresh1 != 0 {
138+
*c2rust_fresh1
139+
} else {
140+
id(1 as ::core::ffi::c_int)
141+
};
142+
let ref mut c2rust_fresh2 = id(2 as ::core::ffi::c_int);
143+
*(buf as *mut ::core::ffi::c_int).offset(1 as ::core::ffi::c_int as isize) =
144+
if *c2rust_fresh2 != 0 {
145+
*c2rust_fresh2
146+
} else {
147+
id(3 as ::core::ffi::c_int)
148+
};
149+
if add(
150+
(buf as *mut ::core::ffi::c_int).offset(2 as ::core::ffi::c_int as isize),
151+
2 as ::core::ffi::c_int,
152+
0 as ::core::ffi::c_int,
153+
) == 0
154+
{
155+
add(
156+
(buf as *mut ::core::ffi::c_int).offset(3 as ::core::ffi::c_int as isize),
157+
3 as ::core::ffi::c_int,
158+
0 as ::core::ffi::c_int,
159+
);
160+
}
161+
if add(
162+
(buf as *mut ::core::ffi::c_int).offset(4 as ::core::ffi::c_int as isize),
163+
4 as ::core::ffi::c_int,
164+
1 as ::core::ffi::c_int,
165+
) == 0
166+
{
167+
add(
168+
(buf as *mut ::core::ffi::c_int).offset(5 as ::core::ffi::c_int as isize),
169+
5 as ::core::ffi::c_int,
170+
0 as ::core::ffi::c_int,
171+
);
172+
}
173+
}

c2rust-transpile/tests/snapshots/snapshots__transpile@conditions.c.2024.snap

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,3 +92,82 @@ pub unsafe extern "C" fn nested_early_returns(mut x: ::core::ffi::c_int) -> ::co
9292
}
9393
return x;
9494
}
95+
#[unsafe(no_mangle)]
96+
pub unsafe extern "C" fn conditional_operator(
97+
sz: ::core::ffi::c_uint,
98+
buf: *mut ::core::ffi::c_int,
99+
) {
100+
let mut x: *mut ::core::ffi::c_int = (buf as *mut ::core::ffi::c_int)
101+
.offset(0 as ::core::ffi::c_int as isize)
102+
as *mut ::core::ffi::c_int;
103+
let mut y: *mut ::core::ffi::c_int = (buf as *mut ::core::ffi::c_int)
104+
.offset(1 as ::core::ffi::c_int as isize)
105+
as *mut ::core::ffi::c_int;
106+
let ref mut c2rust_fresh0 = *if false { &raw mut y } else { &raw mut x };
107+
*c2rust_fresh0 = 10 as ::core::ffi::c_int as *mut ::core::ffi::c_int;
108+
*(buf as *mut ::core::ffi::c_int).offset(2 as ::core::ffi::c_int as isize) = if true {
109+
2 as ::core::ffi::c_int
110+
} else {
111+
3 as ::core::ffi::c_int
112+
};
113+
*(buf as *mut ::core::ffi::c_int).offset(3 as ::core::ffi::c_int as isize) = if false {
114+
2 as ::core::ffi::c_int
115+
} else {
116+
3 as ::core::ffi::c_int
117+
};
118+
}
119+
unsafe extern "C" fn id(mut i: ::core::ffi::c_int) -> ::core::ffi::c_int {
120+
return i;
121+
}
122+
unsafe extern "C" fn add(
123+
mut p: *mut ::core::ffi::c_int,
124+
mut i: ::core::ffi::c_int,
125+
mut r: ::core::ffi::c_int,
126+
) -> ::core::ffi::c_int {
127+
*p += i;
128+
return r;
129+
}
130+
#[unsafe(no_mangle)]
131+
pub unsafe extern "C" fn binary_conditional_operator(
132+
sz: ::core::ffi::c_uint,
133+
buf: *mut ::core::ffi::c_int,
134+
) {
135+
let ref mut c2rust_fresh1 = id(0 as ::core::ffi::c_int);
136+
*(buf as *mut ::core::ffi::c_int).offset(0 as ::core::ffi::c_int as isize) =
137+
if *c2rust_fresh1 != 0 {
138+
*c2rust_fresh1
139+
} else {
140+
id(1 as ::core::ffi::c_int)
141+
};
142+
let ref mut c2rust_fresh2 = id(2 as ::core::ffi::c_int);
143+
*(buf as *mut ::core::ffi::c_int).offset(1 as ::core::ffi::c_int as isize) =
144+
if *c2rust_fresh2 != 0 {
145+
*c2rust_fresh2
146+
} else {
147+
id(3 as ::core::ffi::c_int)
148+
};
149+
if add(
150+
(buf as *mut ::core::ffi::c_int).offset(2 as ::core::ffi::c_int as isize),
151+
2 as ::core::ffi::c_int,
152+
0 as ::core::ffi::c_int,
153+
) == 0
154+
{
155+
add(
156+
(buf as *mut ::core::ffi::c_int).offset(3 as ::core::ffi::c_int as isize),
157+
3 as ::core::ffi::c_int,
158+
0 as ::core::ffi::c_int,
159+
);
160+
}
161+
if add(
162+
(buf as *mut ::core::ffi::c_int).offset(4 as ::core::ffi::c_int as isize),
163+
4 as ::core::ffi::c_int,
164+
1 as ::core::ffi::c_int,
165+
) == 0
166+
{
167+
add(
168+
(buf as *mut ::core::ffi::c_int).offset(5 as ::core::ffi::c_int as isize),
169+
5 as ::core::ffi::c_int,
170+
0 as ::core::ffi::c_int,
171+
);
172+
}
173+
}

0 commit comments

Comments
 (0)