https://gcc.gnu.org/g:ddfa66d92e5359d2f2571e7ee85e26ad95c7dab2
commit r17-4120-gddfa66d92e5359d2f2571e7ee85e26ad95c7dab2 Author: Philip Herron <[email protected]> Date: Sat Aug 15 22:31:35 2026 +0100 gccrs: Add test cases to close out issues Fixes Rust-GCC/gccrs#4157 gcc/testsuite/ChangeLog: * rust/compile/issue-4157-1.rs: New test. * rust/compile/issue-4157-2.rs: New test. Signed-off-by: Philip Herron <[email protected]> Diff: --- gcc/testsuite/rust/compile/issue-4157-1.rs | 22 +++++++++++++++ gcc/testsuite/rust/compile/issue-4157-2.rs | 43 ++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+) diff --git a/gcc/testsuite/rust/compile/issue-4157-1.rs b/gcc/testsuite/rust/compile/issue-4157-1.rs new file mode 100644 index 000000000000..9ecb212dd44f --- /dev/null +++ b/gcc/testsuite/rust/compile/issue-4157-1.rs @@ -0,0 +1,22 @@ +#![feature(no_core)] +#![no_core] +#![feature(lang_items)] + +#[lang = "sized"] +trait Sized {} + +struct MyStruct {} +struct Nested { + nested: MyStruct, +} +struct Mix2 { + nested: (Nested,), +} + +const MIX_2: Mix2 = Mix2 { nested: ((2,),) }; +// { dg-error "mismatched types, expected .Nested. but got" "" { target *-*-* } .-1 } + +fn main() { + let f = [0; (MIX_2.nested.0).0]; + // { dg-error "expected tuple or tuple struct, found .Nested." "" { target *-*-* } .-1 } +} diff --git a/gcc/testsuite/rust/compile/issue-4157-2.rs b/gcc/testsuite/rust/compile/issue-4157-2.rs new file mode 100644 index 000000000000..9d58cd6ad5cf --- /dev/null +++ b/gcc/testsuite/rust/compile/issue-4157-2.rs @@ -0,0 +1,43 @@ +#![feature(no_core)] +#![no_core] +#![feature(lang_items)] + +#[lang = "sized"] +trait Sized {} + +struct MyStruct { + field: usize, +} +struct Nested { + nested: MyStruct, +} +struct Mix2 { + nested: (Nested,), +} + +const STRUCT: MyStruct = MyStruct { field: 42 }; +const TUP: (usize,) = (43,); +const NESTED_S: Nested = Nested { + nested: MyStruct { field: 5 }, +}; +const NESTED_T: ((usize,),) = ((4,),); +const MIX_1: ((Nested,),) = ((MyStruct { field: 3 },),); +// { dg-error "mismatched types, expected .Nested. but got .MyStruct." "" { target *-*-* } .-1 } +const MIX_2: Mix2 = Mix2 { nested: ((2,),) }; +// { dg-error "mismatched types, expected .Nested. but got" "" { target *-*-* } .-1 } +const INSTANT_1: usize = (MyStruct { field: 1 }).field; +const INSTANT_2: usize = (4,).0; + +fn main() { + let h = [0; STRUCT.field]; + let b = [0; TUP.0]; + let c = [0; NESTED_S.nested.field]; + let d = [0; (NESTED_T.0).0]; + let e = [0; (MIX_1.0).0.nested.field]; + // { dg-error "failed to resolve TupleIndexExpr receiver" "" { target *-*-* } .-1 } + // { dg-error "expected algebraic data type got .<tyty::error>." "" { target *-*-* } .-2 } + let f = [0; (MIX_2.nested.0).0]; + // { dg-error "expected tuple or tuple struct, found .Nested." "" { target *-*-* } .-1 } + let g = [0; INSTANT_1]; + let h = [0; INSTANT_2]; +}
