Skip to content

Commit 3c05a6b

Browse files
committed
Add more optional reference tests
1 parent 61db41d commit 3c05a6b

File tree

4 files changed

+36
-0
lines changed

4 files changed

+36
-0
lines changed

tests/ffi/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,8 @@ pub mod ffi {
134134
fn c_take_ref_c(c: &C);
135135
fn c_take_opt_ref_r(r: Option<&R>);
136136
fn c_take_opt_mut_r(r: Option<&mut R>);
137+
fn c_take_opt_ref_c(r: Option<&C>);
138+
fn c_take_opt_mut_c(r: Option<Pin<&mut C>>);
137139
fn c_take_str(s: &str);
138140
fn c_take_slice_char(s: &[c_char]);
139141
fn c_take_slice_shared(s: &[Shared]);

tests/ffi/module.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,10 @@ pub mod ffi2 {
3535
fn c_take_trivial_mut_ref(d: &mut D);
3636
fn c_take_trivial_pin_ref(d: Pin<&D>);
3737
fn c_take_trivial_pin_mut_ref(d: Pin<&mut D>);
38+
fn c_take_trivial_opt_ref(d: Option<&D>);
39+
fn c_take_trivial_opt_mut_ref(d: Option<&mut D>);
40+
fn c_take_trivial_opt_pin_ref(d: Option<Pin<&D>>);
41+
fn c_take_trivial_opt_pin_mut_ref(d: Option<Pin<&mut D>>);
3842
fn c_take_trivial_ref_method(self: &D);
3943
fn c_take_trivial_mut_ref_method(self: &mut D);
4044
fn c_take_trivial(d: D);

tests/ffi/tests.cc

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,22 @@ void c_take_opt_mut_r(R *r) {
289289
}
290290
}
291291

292+
void c_take_opt_ref_c(const C *c) {
293+
if (c) {
294+
c_take_ref_c(*c);
295+
} else {
296+
cxx_test_suite_set_correct();
297+
}
298+
}
299+
300+
void c_take_opt_mut_c(C *c) {
301+
if (c) {
302+
c_take_ref_c(*c);
303+
} else {
304+
cxx_test_suite_set_correct();
305+
}
306+
}
307+
292308
void c_take_ref_ns_c(const ::H::H &h) {
293309
if (h.h == "hello") {
294310
cxx_test_suite_set_correct();
@@ -640,6 +656,14 @@ void c_take_trivial_pin_ref(const D &d) { (void)d; }
640656

641657
void c_take_trivial_pin_mut_ref(D &d) { (void)d; }
642658

659+
void c_take_trivial_opt_ref(const D *d) { (void)d; }
660+
661+
void c_take_trivial_opt_mut_ref(D *d) { (void)d; }
662+
663+
void c_take_trivial_opt_pin_ref(const D *d) { (void)d; }
664+
665+
void c_take_trivial_opt_pin_mut_ref(D *d) { (void)d; }
666+
643667
void D::c_take_trivial_ref_method() const {
644668
if (d == 30) {
645669
cxx_test_suite_set_correct();

tests/ffi/tests.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,8 @@ void c_take_ref_r(const R &r);
133133
void c_take_ref_c(const C &c);
134134
void c_take_opt_ref_r(const R *r);
135135
void c_take_opt_mut_r(R *r);
136+
void c_take_opt_ref_c(const C *c);
137+
void c_take_opt_mut_c(C *c);
136138
void c_take_ref_ns_c(const ::H::H &h);
137139
void c_take_str(rust::Str s);
138140
void c_take_slice_char(rust::Slice<const char> s);
@@ -193,6 +195,10 @@ void c_take_trivial_ref(const D &d);
193195
void c_take_trivial_mut_ref(D &d);
194196
void c_take_trivial_pin_ref(const D &d);
195197
void c_take_trivial_pin_mut_ref(D &d);
198+
void c_take_trivial_opt_ref(const D *d);
199+
void c_take_trivial_opt_mut_ref(D *d);
200+
void c_take_trivial_opt_pin_ref(const D *d);
201+
void c_take_trivial_opt_pin_mut_ref(D *d);
196202
void c_take_trivial(D d);
197203

198204
void c_take_trivial_ns_ptr(std::unique_ptr<::G::G> g);

0 commit comments

Comments
 (0)