mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 14:55:26 +00:00
convert codegen/repr/transparent-* tests to no_core, fix discrepancies
This commit is contained in:
parent
549eac374f
commit
8fdd5e044b
@ -1,8 +1,14 @@
|
||||
//@ compile-flags: -C no-prepopulate-passes
|
||||
//@ only-loongarch64
|
||||
//@ only-linux
|
||||
//@ compile-flags: -C no-prepopulate-passes --target loongarch64-unknown-linux-gnu
|
||||
//@ needs-llvm-components: loongarch
|
||||
|
||||
#![feature(no_core, lang_items)]
|
||||
#![crate_type = "lib"]
|
||||
#![no_std]
|
||||
#![no_core]
|
||||
|
||||
#[lang="sized"] trait Sized { }
|
||||
#[lang="freeze"] trait Freeze { }
|
||||
#[lang="copy"] trait Copy { }
|
||||
|
||||
// CHECK: define void @f_fpr_tracking(double %0, double %1, double %2, double %3, double %4, double %5, double %6, double %7, i8 noundef zeroext %i)
|
||||
#[no_mangle]
|
||||
@ -254,7 +260,7 @@ pub struct IntDoubleInt {
|
||||
#[no_mangle]
|
||||
pub extern "C" fn f_int_double_int_s_arg(a: IntDoubleInt) {}
|
||||
|
||||
// CHECK: define void @f_ret_int_double_int_s(ptr noalias nocapture noundef sret(%IntDoubleInt) align 8 dereferenceable(24) %_0)
|
||||
// CHECK: define void @f_ret_int_double_int_s(ptr noalias nocapture noundef sret([24 x i8]) align 8 dereferenceable(24) %_0)
|
||||
#[no_mangle]
|
||||
pub extern "C" fn f_ret_int_double_int_s() -> IntDoubleInt {
|
||||
IntDoubleInt { a: 1, b: 2., c: 3 }
|
||||
|
@ -1,22 +1,40 @@
|
||||
//@ revisions: arm mips thumb wasm32
|
||||
//@ revisions: arm-linux arm-android armv7-linux armv7-android mips thumb sparc
|
||||
//@ compile-flags: -C no-prepopulate-passes
|
||||
//
|
||||
//@[arm] only-arm
|
||||
//@[mips] only-mips
|
||||
//@[thumb] only-thumb
|
||||
//@[wasm32] only-wasm32
|
||||
//@ ignore-emscripten
|
||||
|
||||
//@[arm-linux] compile-flags: --target arm-unknown-linux-gnueabi
|
||||
//@[arm-linux] needs-llvm-components: arm
|
||||
//@[arm-android] compile-flags: --target arm-linux-androideabi
|
||||
//@[arm-android] needs-llvm-components: arm
|
||||
//@[armv7-linux] compile-flags: --target armv7-unknown-linux-gnueabi
|
||||
//@[armv7-linux] needs-llvm-components: arm
|
||||
//@[armv7-android] compile-flags: --target armv7-linux-androideabi
|
||||
//@[armv7-android] needs-llvm-components: arm
|
||||
//@[mips] compile-flags: --target mips-unknown-linux-gnu
|
||||
//@[mips] needs-llvm-components: mips
|
||||
//@[thumb] compile-flags: --target thumbv7neon-linux-androideabi
|
||||
//@[thumb] needs-llvm-components: arm
|
||||
//@[sparc] compile-flags: --target sparc-unknown-linux-gnu
|
||||
//@[sparc] needs-llvm-components: sparc
|
||||
|
||||
// See ./transparent.rs
|
||||
// Some platforms pass large aggregates using immediate arrays in LLVMIR
|
||||
// Other platforms pass large aggregates using struct pointer in LLVMIR
|
||||
// This covers the "immediate array" case.
|
||||
|
||||
#![feature(transparent_unions)]
|
||||
#![feature(no_core, lang_items, transparent_unions)]
|
||||
#![crate_type = "lib"]
|
||||
#![no_std]
|
||||
#![no_core]
|
||||
|
||||
#![crate_type="lib"]
|
||||
#[lang="sized"] trait Sized { }
|
||||
#[lang="freeze"] trait Freeze { }
|
||||
#[lang="copy"] trait Copy { }
|
||||
|
||||
impl Copy for [u32; 16] {}
|
||||
impl Copy for BigS {}
|
||||
impl Copy for BigU {}
|
||||
|
||||
|
||||
#[derive(Clone, Copy)]
|
||||
#[repr(C)]
|
||||
pub struct BigS([u32; 16]);
|
||||
|
||||
@ -33,24 +51,23 @@ pub enum TeBigS {
|
||||
Variant(BigS),
|
||||
}
|
||||
|
||||
// CHECK: define void @test_BigS(ptr [[BIGS_RET_ATTRS1:.*]] sret(%BigS) [[BIGS_RET_ATTRS2:.*]], [16 x i32]
|
||||
// CHECK: define void @test_BigS(ptr [[BIGS_RET_ATTRS1:.*]] sret([64 x i8]) [[BIGS_RET_ATTRS2:.*]], [16 x i32]
|
||||
#[no_mangle]
|
||||
pub extern fn test_BigS(_: BigS) -> BigS { loop {} }
|
||||
|
||||
// CHECK: define void @test_TsBigS(ptr [[BIGS_RET_ATTRS1]] sret(%TsBigS) [[BIGS_RET_ATTRS2]], [16 x i32]
|
||||
// CHECK: define void @test_TsBigS(ptr [[BIGS_RET_ATTRS1]] sret([64 x i8]) [[BIGS_RET_ATTRS2]], [16 x i32]
|
||||
#[no_mangle]
|
||||
pub extern fn test_TsBigS(_: TsBigS) -> TsBigS { loop {} }
|
||||
|
||||
// CHECK: define void @test_TuBigS(ptr [[BIGS_RET_ATTRS1]] sret(%TuBigS) [[BIGS_RET_ATTRS2]], [16 x i32]
|
||||
// CHECK: define void @test_TuBigS(ptr [[BIGS_RET_ATTRS1]] sret([64 x i8]) [[BIGS_RET_ATTRS2]], [16 x i32]
|
||||
#[no_mangle]
|
||||
pub extern fn test_TuBigS(_: TuBigS) -> TuBigS { loop {} }
|
||||
|
||||
// CHECK: define void @test_TeBigS(ptr [[BIGS_RET_ATTRS1]] sret(%"TeBigS::Variant") [[BIGS_RET_ATTRS2]], [16 x i32]
|
||||
// CHECK: define void @test_TeBigS(ptr [[BIGS_RET_ATTRS1]] sret([64 x i8]) [[BIGS_RET_ATTRS2]], [16 x i32]
|
||||
#[no_mangle]
|
||||
pub extern fn test_TeBigS(_: TeBigS) -> TeBigS { loop {} }
|
||||
|
||||
|
||||
#[derive(Clone, Copy)]
|
||||
#[repr(C)]
|
||||
pub union BigU {
|
||||
foo: [u32; 16],
|
||||
@ -69,18 +86,18 @@ pub enum TeBigU {
|
||||
Variant(BigU),
|
||||
}
|
||||
|
||||
// CHECK: define void @test_BigU(ptr [[BIGU_RET_ATTRS1:.*]] sret(%BigU) [[BIGU_RET_ATTRS2:.*]], [16 x i32]
|
||||
// CHECK: define void @test_BigU(ptr [[BIGU_RET_ATTRS1:.*]] sret([64 x i8]) [[BIGU_RET_ATTRS2:.*]], [16 x i32]
|
||||
#[no_mangle]
|
||||
pub extern fn test_BigU(_: BigU) -> BigU { loop {} }
|
||||
|
||||
// CHECK: define void @test_TsBigU(ptr [[BIGU_RET_ATTRS1]] sret(%TsBigU) [[BIGU_RET_ATTRS2]], [16 x i32]
|
||||
// CHECK: define void @test_TsBigU(ptr [[BIGU_RET_ATTRS1]] sret([64 x i8]) [[BIGU_RET_ATTRS2]], [16 x i32]
|
||||
#[no_mangle]
|
||||
pub extern fn test_TsBigU(_: TsBigU) -> TsBigU { loop {} }
|
||||
|
||||
// CHECK: define void @test_TuBigU(ptr [[BIGU_RET_ATTRS1]] sret(%TuBigU) [[BIGU_RET_ATTRS2]], [16 x i32]
|
||||
// CHECK: define void @test_TuBigU(ptr [[BIGU_RET_ATTRS1]] sret([64 x i8]) [[BIGU_RET_ATTRS2]], [16 x i32]
|
||||
#[no_mangle]
|
||||
pub extern fn test_TuBigU(_: TuBigU) -> TuBigU { loop {} }
|
||||
|
||||
// CHECK: define void @test_TeBigU(ptr [[BIGU_RET_ATTRS1]] sret(%"TeBigU::Variant") [[BIGU_RET_ATTRS2]], [16 x i32]
|
||||
// CHECK: define void @test_TeBigU(ptr [[BIGU_RET_ATTRS1]] sret([64 x i8]) [[BIGU_RET_ATTRS2]], [16 x i32]
|
||||
#[no_mangle]
|
||||
pub extern fn test_TeBigU(_: TeBigU) -> TeBigU { loop {} }
|
||||
|
@ -1,15 +1,25 @@
|
||||
//@ compile-flags: -C no-prepopulate-passes
|
||||
//
|
||||
//@ revisions: mips64 mips64el
|
||||
|
||||
//@[mips64] compile-flags: -C no-prepopulate-passes --target mips64-unknown-linux-gnuabi64
|
||||
//@[mips64] needs-llvm-components: mips
|
||||
//@[mips64el] compile-flags: -C no-prepopulate-passes --target mips64el-unknown-linux-gnuabi64
|
||||
//@[mips64el] needs-llvm-components: mips
|
||||
|
||||
//@ only-mips64
|
||||
// See ./transparent.rs
|
||||
|
||||
#![feature(transparent_unions)]
|
||||
#![feature(no_core, lang_items, transparent_unions)]
|
||||
#![crate_type = "lib"]
|
||||
#![no_std]
|
||||
#![no_core]
|
||||
|
||||
#![crate_type="lib"]
|
||||
#[lang="sized"] trait Sized { }
|
||||
#[lang="freeze"] trait Freeze { }
|
||||
#[lang="copy"] trait Copy { }
|
||||
|
||||
impl Copy for [u32; 16] {}
|
||||
impl Copy for BigS {}
|
||||
impl Copy for BigU {}
|
||||
|
||||
#[derive(Clone, Copy)]
|
||||
#[repr(C)]
|
||||
pub struct BigS([u32; 16]);
|
||||
|
||||
@ -26,24 +36,23 @@ pub enum TeBigS {
|
||||
Variant(BigS),
|
||||
}
|
||||
|
||||
// CHECK: define void @test_BigS(%BigS* [[BIGS_RET_ATTRS1:.*]] sret(%BigS) [[BIGS_RET_ATTRS2:.*]], [8 x i64]
|
||||
// CHECK: define void @test_BigS(ptr [[BIGS_RET_ATTRS1:.*]] sret([64 x i8]) [[BIGS_RET_ATTRS2:.*]], [8 x i64]
|
||||
#[no_mangle]
|
||||
pub extern fn test_BigS(_: BigS) -> BigS { loop {} }
|
||||
|
||||
// CHECK: define void @test_TsBigS(%TsBigS* [[BIGS_RET_ATTRS1]] sret(%TsBigS) [[BIGS_RET_ATTRS2]], [8 x i64]
|
||||
// CHECK: define void @test_TsBigS(ptr [[BIGS_RET_ATTRS1]] sret([64 x i8]) [[BIGS_RET_ATTRS2]], [8 x i64]
|
||||
#[no_mangle]
|
||||
pub extern fn test_TsBigS(_: TsBigS) -> TsBigS { loop {} }
|
||||
|
||||
// CHECK: define void @test_TuBigS(%TuBigS* [[BIGS_RET_ATTRS1]] sret(%TuBigS) [[BIGS_RET_ATTRS2]], [8 x i64]
|
||||
// CHECK: define void @test_TuBigS(ptr [[BIGS_RET_ATTRS1]] sret([64 x i8]) [[BIGS_RET_ATTRS2]], [8 x i64]
|
||||
#[no_mangle]
|
||||
pub extern fn test_TuBigS(_: TuBigS) -> TuBigS { loop {} }
|
||||
|
||||
// CHECK: define void @test_TeBigS(%"TeBigS::Variant"* [[BIGS_RET_ATTRS1]] sret(%"TeBigS::Variant") [[BIGS_RET_ATTRS2]], [8 x i64]
|
||||
// CHECK: define void @test_TeBigS(ptr [[BIGS_RET_ATTRS1]] sret([64 x i8]) [[BIGS_RET_ATTRS2]], [8 x i64]
|
||||
#[no_mangle]
|
||||
pub extern fn test_TeBigS(_: TeBigS) -> TeBigS { loop {} }
|
||||
|
||||
|
||||
#[derive(Clone, Copy)]
|
||||
#[repr(C)]
|
||||
pub union BigU {
|
||||
foo: [u32; 16],
|
||||
@ -62,18 +71,18 @@ pub enum TeBigU {
|
||||
Variant(BigU),
|
||||
}
|
||||
|
||||
// CHECK: define void @test_BigU(%BigU* [[BIGU_RET_ATTRS1:.*]] sret(%BigU) [[BIGU_RET_ATTRS2:.*]], [8 x i64]
|
||||
// CHECK: define void @test_BigU(ptr [[BIGU_RET_ATTRS1:.*]] sret([64 x i8]) [[BIGU_RET_ATTRS2:.*]], [8 x i64]
|
||||
#[no_mangle]
|
||||
pub extern fn test_BigU(_: BigU) -> BigU { loop {} }
|
||||
|
||||
// CHECK: define void @test_TsBigU(%TsBigU* [[BIGU_RET_ATTRS1]] sret(%TsBigU) [[BIGU_RET_ATTRS2]], [8 x i64]
|
||||
// CHECK: define void @test_TsBigU(ptr [[BIGU_RET_ATTRS1]] sret([64 x i8]) [[BIGU_RET_ATTRS2]], [8 x i64]
|
||||
#[no_mangle]
|
||||
pub extern fn test_TsBigU(_: TsBigU) -> TsBigU { loop {} }
|
||||
|
||||
// CHECK: define void @test_TuBigU(%TuBigU* [[BIGU_RET_ATTRS1]] sret(%TuBigU) [[BIGU_RET_ATTRS2]], [8 x i64]
|
||||
// CHECK: define void @test_TuBigU(ptr [[BIGU_RET_ATTRS1]] sret([64 x i8]) [[BIGU_RET_ATTRS2]], [8 x i64]
|
||||
#[no_mangle]
|
||||
pub extern fn test_TuBigU(_: TuBigU) -> TuBigU { loop {} }
|
||||
|
||||
// CHECK: define void @test_TeBigU(%"TeBigU::Variant"* [[BIGU_RET_ATTRS1]] sret(%"TeBigU::Variant") [[BIGU_RET_ATTRS2]], [8 x i64]
|
||||
// CHECK: define void @test_TeBigU(ptr [[BIGU_RET_ATTRS1]] sret([64 x i8]) [[BIGU_RET_ATTRS2]], [8 x i64]
|
||||
#[no_mangle]
|
||||
pub extern fn test_TeBigU(_: TeBigU) -> TeBigU { loop {} }
|
||||
|
101
tests/codegen/repr/transparent-sparc64.rs
Normal file
101
tests/codegen/repr/transparent-sparc64.rs
Normal file
@ -0,0 +1,101 @@
|
||||
//@ compile-flags: -O -C no-prepopulate-passes --target sparc64-unknown-linux-gnu
|
||||
//@ needs-llvm-components: sparc
|
||||
|
||||
// See ./transparent.rs
|
||||
|
||||
#![feature(no_core, lang_items, transparent_unions)]
|
||||
#![crate_type = "lib"]
|
||||
#![no_std]
|
||||
#![no_core]
|
||||
|
||||
#[lang="sized"] trait Sized { }
|
||||
#[lang="freeze"] trait Freeze { }
|
||||
#[lang="copy"] trait Copy { }
|
||||
|
||||
impl Copy for [u32; 16] {}
|
||||
impl Copy for BigS {}
|
||||
impl Copy for BigU {}
|
||||
|
||||
|
||||
#[repr(C)]
|
||||
pub struct BigS([u32; 16]);
|
||||
|
||||
#[repr(transparent)]
|
||||
pub struct TsBigS(BigS);
|
||||
|
||||
#[repr(transparent)]
|
||||
pub union TuBigS {
|
||||
field: BigS,
|
||||
}
|
||||
|
||||
#[repr(transparent)]
|
||||
pub enum TeBigS {
|
||||
Variant(BigS),
|
||||
}
|
||||
|
||||
// CHECK: define{{.*}}void @test_BigS(ptr [[BIGS_RET_ATTRS1:.*]] sret([64 x i8]) [[BIGS_RET_ATTRS2:.*]], ptr
|
||||
// CHECK-NOT: byval
|
||||
// CHECK-SAME: %{{[0-9a-z_]+}})
|
||||
#[no_mangle]
|
||||
pub extern "C" fn test_BigS(_: BigS) -> BigS { loop {} }
|
||||
|
||||
// CHECK: define{{.*}}void @test_TsBigS(ptr [[BIGS_RET_ATTRS1]] sret([64 x i8]) [[BIGS_RET_ATTRS2]], ptr
|
||||
// CHECK-NOT: byval
|
||||
// CHECK-SAME: %{{[0-9a-z_]+}})
|
||||
#[no_mangle]
|
||||
pub extern "C" fn test_TsBigS(_: TsBigS) -> TsBigS { loop {} }
|
||||
|
||||
// CHECK: define{{.*}}void @test_TuBigS(ptr [[BIGS_RET_ATTRS1]] sret([64 x i8]) [[BIGS_RET_ATTRS2]], ptr
|
||||
// CHECK-NOT: byval
|
||||
// CHECK-SAME: %{{[0-9a-z_]+}})
|
||||
#[no_mangle]
|
||||
pub extern "C" fn test_TuBigS(_: TuBigS) -> TuBigS { loop {} }
|
||||
|
||||
// CHECK: define{{.*}}void @test_TeBigS(ptr [[BIGS_RET_ATTRS1]] sret([64 x i8]) [[BIGS_RET_ATTRS2]], ptr
|
||||
// CHECK-NOT: byval
|
||||
// CHECK-SAME: %{{[0-9a-z_]+}})
|
||||
#[no_mangle]
|
||||
pub extern "C" fn test_TeBigS(_: TeBigS) -> TeBigS { loop {} }
|
||||
|
||||
|
||||
#[repr(C)]
|
||||
pub union BigU {
|
||||
foo: [u32; 16],
|
||||
}
|
||||
|
||||
#[repr(transparent)]
|
||||
pub struct TsBigU(BigU);
|
||||
|
||||
#[repr(transparent)]
|
||||
pub union TuBigU {
|
||||
field: BigU,
|
||||
}
|
||||
|
||||
#[repr(transparent)]
|
||||
pub enum TeBigU {
|
||||
Variant(BigU),
|
||||
}
|
||||
|
||||
// CHECK: define{{.*}}void @test_BigU(ptr [[BIGU_RET_ATTRS1:.*]] sret([64 x i8]) [[BIGU_RET_ATTRS2:.*]], ptr
|
||||
// CHECK-NOT: byval
|
||||
// CHECK-SAME: %{{[0-9a-z_]+}})
|
||||
#[no_mangle]
|
||||
pub extern "C" fn test_BigU(_: BigU) -> BigU { loop {} }
|
||||
|
||||
// CHECK: define{{.*}}void @test_TsBigU(ptr [[BIGU_RET_ATTRS1:.*]] sret([64 x i8]) [[BIGU_RET_ATTRS2:.*]], ptr
|
||||
// CHECK-NOT: byval
|
||||
// CHECK-SAME: %{{[0-9a-z_]+}})
|
||||
#[no_mangle]
|
||||
pub extern "C" fn test_TsBigU(_: TsBigU) -> TsBigU { loop {} }
|
||||
|
||||
// CHECK: define{{.*}}void @test_TuBigU(ptr [[BIGU_RET_ATTRS1]] sret([64 x i8]) [[BIGU_RET_ATTRS2:.*]], ptr
|
||||
// CHECK-NOT: byval
|
||||
// CHECK-SAME: %{{[0-9a-z_]+}})
|
||||
#[no_mangle]
|
||||
pub extern "C" fn test_TuBigU(_: TuBigU) -> TuBigU { loop {} }
|
||||
|
||||
// CHECK: define{{.*}}void @test_TeBigU(ptr [[BIGU_RET_ATTRS1]] sret([64 x i8]) [[BIGU_RET_ATTRS2:.*]], ptr
|
||||
// CHECK-NOT: byval
|
||||
// CHECK-SAME: %{{[0-9a-z_]+}})
|
||||
#[no_mangle]
|
||||
pub extern "C" fn test_TeBigU(_: TeBigU) -> TeBigU { loop {} }
|
@ -1,23 +1,36 @@
|
||||
//@ revisions: x32 x64 sparc sparc64
|
||||
//@ revisions: i686-linux i686-freebsd x64-linux x64-apple wasm32
|
||||
//@ compile-flags: -O -C no-prepopulate-passes
|
||||
//
|
||||
//@[x32] only-x86
|
||||
//@[x64] only-x86_64
|
||||
//@[sparc] only-sparc
|
||||
//@[sparc64] only-sparc64
|
||||
//@ ignore-windows
|
||||
|
||||
//@[i686-linux] compile-flags: --target i686-unknown-linux-gnu
|
||||
//@[i686-linux] needs-llvm-components: x86
|
||||
//@[i686-freebsd] compile-flags: --target i686-unknown-freebsd
|
||||
//@[i686-freebsd] needs-llvm-components: x86
|
||||
//@[x64-linux] compile-flags: --target x86_64-unknown-linux-gnu
|
||||
//@[x64-linux] needs-llvm-components: x86
|
||||
//@[x64-apple] compile-flags: --target x86_64-apple-darwin
|
||||
//@[x64-apple] needs-llvm-components: x86
|
||||
//@[wasm32] compile-flags: --target wasm32-wasi
|
||||
//@[wasm32] needs-llvm-components: webassembly
|
||||
|
||||
// See ./transparent.rs
|
||||
// Some platforms pass large aggregates using immediate arrays in LLVMIR
|
||||
// Other platforms pass large aggregates using struct pointer in LLVMIR
|
||||
// This covers the "struct pointer" case.
|
||||
|
||||
#![feature(no_core, lang_items, transparent_unions)]
|
||||
#![crate_type = "lib"]
|
||||
#![no_std]
|
||||
#![no_core]
|
||||
|
||||
#![feature(transparent_unions)]
|
||||
#[lang="sized"] trait Sized { }
|
||||
#[lang="freeze"] trait Freeze { }
|
||||
#[lang="copy"] trait Copy { }
|
||||
|
||||
#![crate_type="lib"]
|
||||
impl Copy for [u32; 16] {}
|
||||
impl Copy for BigS {}
|
||||
impl Copy for BigU {}
|
||||
|
||||
|
||||
#[derive(Clone, Copy)]
|
||||
#[repr(C)]
|
||||
pub struct BigS([u32; 16]);
|
||||
|
||||
@ -51,7 +64,6 @@ pub extern "C" fn test_TuBigS(_: TuBigS) -> TuBigS { loop {} }
|
||||
pub extern "C" fn test_TeBigS(_: TeBigS) -> TeBigS { loop {} }
|
||||
|
||||
|
||||
#[derive(Clone, Copy)]
|
||||
#[repr(C)]
|
||||
pub union BigU {
|
||||
foo: [u32; 16],
|
||||
|
@ -1,8 +1,21 @@
|
||||
//@ only-x86_64
|
||||
|
||||
//@ revisions: linux apple windows
|
||||
//@ compile-flags: -C no-prepopulate-passes
|
||||
|
||||
#![crate_type="lib"]
|
||||
//@[linux] compile-flags: --target x86_64-unknown-linux-gnu
|
||||
//@[linux] needs-llvm-components: x86
|
||||
//@[apple] compile-flags: --target x86_64-apple-darwin
|
||||
//@[apple] needs-llvm-components: x86
|
||||
//@[windows] compile-flags: --target x86_64-pc-windows-msvc
|
||||
//@[windows] needs-llvm-components: x86
|
||||
|
||||
#![feature(no_core, lang_items)]
|
||||
#![crate_type = "lib"]
|
||||
#![no_std]
|
||||
#![no_core]
|
||||
|
||||
#[lang="sized"] trait Sized { }
|
||||
#[lang="freeze"] trait Freeze { }
|
||||
#[lang="copy"] trait Copy { }
|
||||
|
||||
#[repr(C)]
|
||||
pub struct Rgb8 { r: u8, g: u8, b: u8 }
|
||||
|
Loading…
Reference in New Issue
Block a user