Skip to content

Commit 97f0d7e

Browse files
committed
also test ABI-compatibility for some unsized types
1 parent 020067d commit 97f0d7e

File tree

1 file changed

+19
-2
lines changed

1 file changed

+19
-2
lines changed

Diff for: tests/ui/abi/compatibility.rs

+19-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// check-pass
2-
#![feature(rustc_attrs, transparent_unions)]
2+
#![feature(rustc_attrs, unsized_fn_params, transparent_unions)]
33
#![allow(unused, improper_ctypes_definitions)]
44
use std::marker::PhantomData;
55
use std::num::NonZeroI32;
@@ -25,7 +25,7 @@ macro_rules! assert_abi_compatible {
2525
struct Zst;
2626

2727
#[repr(C)]
28-
struct ReprC1<T>(T);
28+
struct ReprC1<T: ?Sized>(T);
2929
#[repr(C)]
3030
struct ReprC2Int<T>(i32, T);
3131
#[repr(C)]
@@ -124,6 +124,23 @@ mod tricky {
124124
test_transparent!(triple_f64, (f64, f64, f64));
125125
}
126126

127+
// Some tests with unsized types (not all wrappers are compatible with that).
128+
macro_rules! test_transparent_unsized {
129+
($name:ident, $t:ty) => {
130+
mod $name {
131+
use super::*;
132+
assert_abi_compatible!(wrap1, $t, Wrapper1<$t>);
133+
assert_abi_compatible!(wrap1_reprc, ReprC1<$t>, ReprC1<Wrapper1<$t>>);
134+
assert_abi_compatible!(wrap2, $t, Wrapper2<$t>);
135+
assert_abi_compatible!(wrap2_reprc, ReprC1<$t>, ReprC1<Wrapper2<$t>>);
136+
}
137+
};
138+
}
139+
140+
test_transparent_unsized!(str_, str);
141+
test_transparent_unsized!(slice, [u8]);
142+
test_transparent_unsized!(dyn_trait, dyn std::any::Any);
143+
127144
// RFC 3391 <https://rust-lang.github.io/rfcs/3391-result_ffi_guarantees.html>.
128145
macro_rules! test_nonnull {
129146
($name:ident, $t:ty) => {

0 commit comments

Comments
 (0)