diff options
Diffstat (limited to 'gcc/testsuite/rust')
192 files changed, 2119 insertions, 110 deletions
diff --git a/gcc/testsuite/rust/borrowck/reference.rs b/gcc/testsuite/rust/borrowck/reference.rs index b825a96..c4b9f7d 100644 --- a/gcc/testsuite/rust/borrowck/reference.rs +++ b/gcc/testsuite/rust/borrowck/reference.rs @@ -1,5 +1,5 @@ -// { dg-additional-options "-frust-compile-until=compilation -frust-borrowcheck" } - +// { dg-additional-options "-frust-compile-until=compilation -frust-borrowcheck -fdiagnostics-show-caret -fdiagnostics-show-line-numbers" } +// { dg-enable-nn-line-numbers "" } #[lang = "sized"] pub trait Sized {} @@ -32,27 +32,63 @@ fn immutable_borrow_while_immutable_borrowed_struct() { } fn immutable_borrow_while_mutable_borrowed_struct() { - // { dg-error "Found loan errors in function immutable_borrow_while_mutable_borrowed_struct" "" { target *-*-* } .-1 } let mut x = 0; let y = ReferenceMut::new(&mut x); let z = &x; //~ ERROR + // { dg-error "use of borrowed value" "" { target *-*-* } .-1 } let w = y; + /* + { dg-begin-multiline-output "" } + NN | let y = ReferenceMut::new(&mut x); + | ~ + | | + | borrow occurs here + NN | let z = &x; //~ ERROR + | ^ + | | + | borrowed value used here + { dg-end-multiline-output "" } + */ } fn mutable_borrow_while_immutable_borrowed_struct() { - // { dg-error "Found loan errors in function mutable_borrow_while_immutable_borrowed_struct" "" { target *-*-* } .-1 } let x = 0; let y = Reference::new(&x); let z = &mut x; //~ ERROR + // { dg-error "use of borrowed value" "" { target *-*-* } .-1 } let w = y; + /* + { dg-begin-multiline-output "" } + NN | let y = Reference::new(&x); + | ~ + | | + | borrow occurs here + NN | let z = &mut x; //~ ERROR + | ^ + | | + | borrowed value used here + { dg-end-multiline-output "" } + */ } fn mutable_borrow_while_mutable_borrowed_struct() { - // { dg-error "Found loan errors in function mutable_borrow_while_mutable_borrowed_struct" "" { target *-*-* } .-1 } let mut x = 0; let y = ReferenceMut::new(&mut x); let z = &mut x; //~ ERROR + // { dg-error "use of borrowed value" "" { target *-*-* } .-1 } let w = y; + /* + { dg-begin-multiline-output "" } + NN | let y = ReferenceMut::new(&mut x); + | ~ + | | + | borrow occurs here + NN | let z = &mut x; //~ ERROR + | ^ + | | + | borrowed value used here + { dg-end-multiline-output "" } + */ } fn immutable_reborrow_while_immutable_borrowed_struct() { @@ -69,31 +105,73 @@ fn immutable_reborrow_while_mutable_borrowed_struct() { fn mutable_reborrow_while_immutable_borrowed_struct() { // { dg-error "Cannot reborrow immutable borrow as mutable" "" { target *-*-* } .-1 } + /* + { dg-begin-multiline-output "" } + NN | fn mutable_reborrow_while_immutable_borrowed_struct() { + | ^~ + { dg-end-multiline-output "" } + */ let x = 0; let y = Reference::new(&x); let z = &mut *y.value; //~ ERROR } fn read_while_mutable_borrowed_struct() { - // { dg-error "Found loan errors in function read_while_mutable_borrowed_struct" "" { target *-*-* } .-1 } let mut x = 0; let y = ReferenceMut::new(&mut x); let z = x; //~ ERROR + // { dg-error "use of borrowed value" "" { target *-*-* } .-1 } let w = y; + /* + { dg-begin-multiline-output "" } + NN | let y = ReferenceMut::new(&mut x); + | ~ + | | + | borrow occurs here + NN | let z = x; //~ ERROR + | ^ + | | + | borrowed value used here + { dg-end-multiline-output "" } + */ } fn write_while_borrowed_struct() { - // { dg-error "Found loan errors in function write_while_borrowed_struct" "" { target *-*-* } .-1 } let mut x = 0; let y = Reference::new(&x); x = 1; //~ ERROR + // { dg-error "use of borrowed value" "" { target *-*-* } .-1 } let z = y; + /* + { dg-begin-multiline-output "" } + NN | let y = Reference::new(&x); + | ~ + | | + | borrow occurs here + NN | x = 1; //~ ERROR + | ^ + | | + | borrowed value used here + { dg-end-multiline-output "" } + */ } fn write_while_immutable_borrowed_struct() { - // { dg-error "Found loan errors in function write_while_immutable_borrowed_struct" "" { target *-*-* } .-1 } let x = 0; let y = Reference::new(&x); x = 1; //~ ERROR + // { dg-error "use of borrowed value" "" { target *-*-* } .-1 } let z = y; -}
\ No newline at end of file + /* + { dg-begin-multiline-output "" } + NN | let y = Reference::new(&x); + | ~ + | | + | borrow occurs here + NN | x = 1; //~ ERROR + | ^ + | | + | borrowed value used here + { dg-end-multiline-output "" } + */ +} diff --git a/gcc/testsuite/rust/borrowck/return_ref_to_local.rs b/gcc/testsuite/rust/borrowck/return_ref_to_local.rs index 994dc5d..ce23f91 100644 --- a/gcc/testsuite/rust/borrowck/return_ref_to_local.rs +++ b/gcc/testsuite/rust/borrowck/return_ref_to_local.rs @@ -1,6 +1,17 @@ -// { dg-additional-options "-frust-compile-until=compilation -frust-borrowcheck" } +// { dg-additional-options "-frust-compile-until=compilation -frust-borrowcheck -fdiagnostics-show-caret -fdiagnostics-show-line-numbers" } +// { dg-enable-nn-line-numbers "" } -pub fn return_ref_to_local() -> &'static i32 { // { dg-error "Found loan errors in function return_ref_to_local" } +pub fn return_ref_to_local() -> &'static i32 { let x = 0; &x //~ ERROR + // { dg-error "use of borrowed value" "" { target *-*-* } .-1 } + /* + { dg-begin-multiline-output "" } + NN | &x //~ ERROR + | ^ + | | + | borrow occurs here + | borrowed value used here + { dg-end-multiline-output "" } + */ } diff --git a/gcc/testsuite/rust/borrowck/subset.rs b/gcc/testsuite/rust/borrowck/subset.rs index d7c00ca..5b4a663 100644 --- a/gcc/testsuite/rust/borrowck/subset.rs +++ b/gcc/testsuite/rust/borrowck/subset.rs @@ -1,8 +1,19 @@ -// { dg-additional-options "-frust-compile-until=compilation -frust-borrowcheck" } +// { dg-additional-options "-frust-compile-until=compilation -frust-borrowcheck -fdiagnostics-show-caret -fdiagnostics-show-line-numbers" } +// { dg-enable-nn-line-numbers "" } fn missing_subset<'a, 'b>(x: &'a u32, y: &'b u32) -> &'a u32 { - // { dg-error "Found subset errors in function missing_subset" "" { target *-*-* } .-1 } + // { dg-error "subset error, some lifetime constraints need to be added" "" { target *-*-* } .-1 } y //~ ERROR + /* + { dg-begin-multiline-output "" } + NN | fn missing_subset<'a, 'b>(x: &'a u32, y: &'b u32) -> &'a u32 { + | ^~ ~~ ~~ + | | | | + | | | lifetime defined here + | | lifetime defined here + | subset error occurs in this function + { dg-end-multiline-output "" } + */ } fn missing_subset_fixed<'a, 'b>(x: &'a u32, y: &'b u32) -> &'a u32 where 'b: 'a { @@ -10,12 +21,22 @@ fn missing_subset_fixed<'a, 'b>(x: &'a u32, y: &'b u32) -> &'a u32 where 'b: 'a } fn complex_cfg_subset<'a, 'b>(b: bool, x: &'a u32, y: &'b u32) -> &'a u32 { - // { dg-error "Found subset errors in function complex_cfg_subset" "" { target *-*-* } .-1 } + // { dg-error "subset error, some lifetime constraints need to be added" "" { target *-*-* } .-1 } if b { y //~ ERROR } else { x } + /* + { dg-begin-multiline-output "" } + NN | fn complex_cfg_subset<'a, 'b>(b: bool, x: &'a u32, y: &'b u32) -> &'a u32 { + | ^~ ~~ ~~ + | | | | + | | | lifetime defined here + | | lifetime defined here + | subset error occurs in this function + { dg-end-multiline-output "" } + */ } fn complex_cfg_subset_fixed<'a, 'b>(b: bool, x: &'a u32, y: &'b u32) -> &'a u32 where 'b: 'a { @@ -24,4 +45,4 @@ fn complex_cfg_subset_fixed<'a, 'b>(b: bool, x: &'a u32, y: &'b u32) -> &'a u32 } else { y } -}
\ No newline at end of file +} diff --git a/gcc/testsuite/rust/borrowck/test_move.rs b/gcc/testsuite/rust/borrowck/test_move.rs index 2b5e0c3..b647583 100644 --- a/gcc/testsuite/rust/borrowck/test_move.rs +++ b/gcc/testsuite/rust/borrowck/test_move.rs @@ -1,16 +1,32 @@ -// { dg-additional-options "-frust-compile-until=compilation -frust-borrowcheck" } -fn test_move() { // { dg-error "Found move errors in function test_move" } +// { dg-additional-options "-frust-compile-until=compilation -frust-borrowcheck -fdiagnostics-show-caret -fdiagnostics-show-line-numbers" } +// { dg-enable-nn-line-numbers "" } + +fn test_move() { struct A { i: i32, } let a = A { i: 1 }; let b = a; - let c = a; + let c = a; //~ ERROR + // { dg-error "use of moved value" "" { target *-*-* } .-1 } + /* + { dg-begin-multiline-output "" } + NN | let b = a; + | ~ + | | + | value moved here + NN | let c = a; //~ ERROR + | ^ + | | + | moved value used here + { dg-end-multiline-output "" } + */ + } fn test_move_fixed() { let a = 1; // a is now primitive and can be copied let b = a; - let c = b; -}
\ No newline at end of file + let c = a; +} diff --git a/gcc/testsuite/rust/borrowck/test_move_conditional.rs b/gcc/testsuite/rust/borrowck/test_move_conditional.rs index e1e8e20..94882bc 100644 --- a/gcc/testsuite/rust/borrowck/test_move_conditional.rs +++ b/gcc/testsuite/rust/borrowck/test_move_conditional.rs @@ -1,6 +1,7 @@ -// { dg-additional-options "-frust-compile-until=compilation -frust-borrowcheck" } +// { dg-additional-options "-frust-compile-until=compilation -frust-borrowcheck -fdiagnostics-show-caret -fdiagnostics-show-line-numbers" } +// { dg-enable-nn-line-numbers "" } -fn test_move_conditional(b1: bool, b2:bool) { // { dg-error "Found move errors in function test_move" } +fn test_move_conditional(b1: bool, b2:bool) { struct A { i: i32, } @@ -9,9 +10,47 @@ fn test_move_conditional(b1: bool, b2:bool) { // { dg-error "Found move errors i let b = a; if b1 { let b = a; + // { dg-error "use of moved value" "" { target *-*-* } .-1 } + /* + { dg-begin-multiline-output "" } + NN | let b = a; + | ~ + | | + | value moved here + NN | if b1 { + NN | let b = a; + | ~ + | | + | value moved here +...... + NN | let c = a; + | ^ + | | + | moved value used here + { dg-end-multiline-output "" } + */ } if b2 { let c = a; + // { dg-error "use of moved value" "" { target *-*-* } .-1 } + /* + { dg-begin-multiline-output "" } + NN | let b = a; + | ~ + | | + | value moved here + NN | if b1 { + NN | let b = a; + | ^ + | | + | moved value used here +...... + NN | let c = a; + | ~ + | | + | value moved here + { dg-end-multiline-output "" } + */ } } @@ -25,4 +64,4 @@ fn test_move_fixed(b1: bool, b2:bool) { if b2 { let c = a; } -}
\ No newline at end of file +} diff --git a/gcc/testsuite/rust/borrowck/tmp.rs b/gcc/testsuite/rust/borrowck/tmp.rs index a604bea..545a278 100644 --- a/gcc/testsuite/rust/borrowck/tmp.rs +++ b/gcc/testsuite/rust/borrowck/tmp.rs @@ -1,4 +1,5 @@ -// { dg-additional-options "-frust-compile-until=compilation -frust-borrowcheck" } +// { dg-additional-options "-frust-compile-until=compilation -frust-borrowcheck -fdiagnostics-show-caret -fdiagnostics-show-line-numbers" } +// { dg-enable-nn-line-numbers "" } #[lang = "sized"] pub trait Sized {} @@ -12,27 +13,63 @@ fn immutable_borrow_while_immutable_borrowed() { fn immutable_borrow_while_mutable_borrowed() { - // { dg-error "Found loan errors in function immutable_borrow_while_mutable_borrowed" "" { target *-*-* } .-1 } let mut x = 0; let y = &mut x; let z = &x; //~ ERROR + // { dg-error "use of borrowed value" "" { target *-*-* } .-1 } let w = y; + /* + { dg-begin-multiline-output "" } + NN | let y = &mut x; + | ~ + | | + | borrow occurs here + NN | let z = &x; //~ ERROR + | ^ + | | + | borrowed value used here + { dg-end-multiline-output "" } + */ } fn mutable_borrow_while_immutable_borrowed() { - // { dg-error "Found loan errors in function mutable_borrow_while_immutable_borrowed" "" { target *-*-* } .-1 } let x = 0; let y = &x; let z = &mut x; //~ ERROR + // { dg-error "use of borrowed value" "" { target *-*-* } .-1 } let w = y; + /* + { dg-begin-multiline-output "" } + NN | let y = &x; + | ~ + | | + | borrow occurs here + NN | let z = &mut x; //~ ERROR + | ^ + | | + | borrowed value used here + { dg-end-multiline-output "" } + */ } fn mutable_borrow_while_mutable_borrowed() { - // { dg-error "Found loan errors in function mutable_borrow_while_mutable_borrowed" "" { target *-*-* } .-1 } let mut x = 0; let y = &mut x; let z = &mut x; //~ ERROR + // { dg-error "use of borrowed value" "" { target *-*-* } .-1 } let w = y; + /* + { dg-begin-multiline-output "" } + NN | let y = &mut x; + | ~ + | | + | borrow occurs here + NN | let z = &mut x; //~ ERROR + | ^ + | | + | borrowed value used here + { dg-end-multiline-output "" } + */ } fn immutable_reborrow_while_immutable_borrowed() { @@ -52,28 +89,70 @@ fn mutable_reborrow_while_immutable_borrowed() { let x = 0; let y = &x; let z = &mut *y; //~ ERROR + /* + { dg-begin-multiline-output "" } + NN | fn mutable_reborrow_while_immutable_borrowed() { + | ^~ + { dg-end-multiline-output "" } + */ } fn read_while_mutable_borrowed() { - // { dg-error "Found loan errors in function read_while_mutable_borrowed" "" { target *-*-* } .-1 } let mut x = 0; let y = &mut x; let z = x; //~ ERROR + // { dg-error "use of borrowed value" "" { target *-*-* } .-1 } let w = y; + /* + { dg-begin-multiline-output "" } + NN | let y = &mut x; + | ~ + | | + | borrow occurs here + NN | let z = x; //~ ERROR + | ^ + | | + | borrowed value used here + { dg-end-multiline-output "" } + */ } fn write_while_borrowed() { - // { dg-error "Found loan errors in function write_while_borrowed" "" { target *-*-* } .-1 } let mut x = 0; let y = &x; x = 1; //~ ERROR + // { dg-error "use of borrowed value" "" { target *-*-* } .-1 } let z = y; + /* + { dg-begin-multiline-output "" } + NN | let y = &x; + | ~ + | | + | borrow occurs here + NN | x = 1; //~ ERROR + | ^ + | | + | borrowed value used here + { dg-end-multiline-output "" } + */ } fn write_while_immutable_borrowed() { - // { dg-error "Found loan errors in function write_while_immutable_borrowed" "" { target *-*-* } .-1 } let x = 0; let y = &x; x = 1; //~ ERROR + // { dg-error "use of borrowed value" "" { target *-*-* } .-1 } let z = y; -}
\ No newline at end of file + /* + { dg-begin-multiline-output "" } + NN | let y = &x; + | ~ + | | + | borrow occurs here + NN | x = 1; //~ ERROR + | ^ + | | + | borrowed value used here + { dg-end-multiline-output "" } + */ +} diff --git a/gcc/testsuite/rust/borrowck/use_while_mut.rs b/gcc/testsuite/rust/borrowck/use_while_mut.rs index 57ed255..a973f7d 100644 --- a/gcc/testsuite/rust/borrowck/use_while_mut.rs +++ b/gcc/testsuite/rust/borrowck/use_while_mut.rs @@ -1,7 +1,22 @@ -// { dg-additional-options "-frust-compile-until=compilation -frust-borrowcheck" } -pub fn use_while_mut() { // { dg-error "Found loan errors in function use_while_mut" } +// { dg-additional-options "-frust-compile-until=compilation -frust-borrowcheck -fdiagnostics-show-caret -fdiagnostics-show-line-numbers" } +// { dg-enable-nn-line-numbers "" } + +pub fn use_while_mut() { let mut x = 0; let y = &mut x; let z = x; //~ ERROR + // { dg-error "use of borrowed value" "" { target *-*-* } .-1 } let w = y; -}
\ No newline at end of file + /* + { dg-begin-multiline-output "" } + NN | let y = &mut x; + | ~ + | | + | borrow occurs here + NN | let z = x; //~ ERROR + | ^ + | | + | borrowed value used here + { dg-end-multiline-output "" } + */ +} diff --git a/gcc/testsuite/rust/borrowck/use_while_mut_fr.rs b/gcc/testsuite/rust/borrowck/use_while_mut_fr.rs index 736aac0..c2dc168 100644 --- a/gcc/testsuite/rust/borrowck/use_while_mut_fr.rs +++ b/gcc/testsuite/rust/borrowck/use_while_mut_fr.rs @@ -1,8 +1,21 @@ -// { dg-additional-options "-frust-compile-until=compilation -frust-borrowcheck" } - -pub fn use_while_mut_fr(x: &mut i32) -> &mut i32 { // { dg-error "Found loan errors in function use_while_mut_fr" } +// { dg-additional-options "-frust-compile-until=compilation -frust-borrowcheck -fdiagnostics-show-caret -fdiagnostics-show-line-numbers" } +// { dg-enable-nn-line-numbers "" } +pub fn use_while_mut_fr(x: &mut i32) -> &mut i32 { let y = &mut *x; let z = x; //~ ERROR + // { dg-error "use of borrowed value" "" { target *-*-* } .-1 } y + /* + { dg-begin-multiline-output "" } + NN | let y = &mut *x; + | ~ + | | + | borrow occurs here + NN | let z = x; //~ ERROR + | ^ + | | + | borrowed value used here + { dg-end-multiline-output "" } + */ } diff --git a/gcc/testsuite/rust/borrowck/well_formed_function_inputs.rs b/gcc/testsuite/rust/borrowck/well_formed_function_inputs.rs index 6815f44..9102356 100644 --- a/gcc/testsuite/rust/borrowck/well_formed_function_inputs.rs +++ b/gcc/testsuite/rust/borrowck/well_formed_function_inputs.rs @@ -1,10 +1,11 @@ -// { dg-additional-options "-frust-compile-until=compilation -frust-borrowcheck" } +// { dg-additional-options "-frust-compile-until=compilation -frust-borrowcheck -fdiagnostics-show-caret -fdiagnostics-show-line-numbers" } +// { dg-enable-nn-line-numbers "" } fn foo<'a, 'b>(p: &'b &'a mut usize) -> &'b&'a mut usize { p } -fn well_formed_function_inputs() { // { dg-error "Found loan errors in function well_formed_function_inputs" } +fn well_formed_function_inputs() { let s = &mut 1; let r = &mut *s; let tmp = foo(&r ); @@ -12,5 +13,19 @@ fn well_formed_function_inputs() { // { dg-error "Found loan errors in function // let aarg = &*arg; // let tmp = arg; s; //~ ERROR + // { dg-error "use of borrowed value" "" { target *-*-* } .-1 } tmp; -}
\ No newline at end of file + /* + { dg-begin-multiline-output "" } + NN | let r = &mut *s; + | ~ + | | + | borrow occurs here +...... + NN | s; //~ ERROR + | ^ + | | + | borrowed value used here + { dg-end-multiline-output "" } + */ +} diff --git a/gcc/testsuite/rust/compile/assume.rs b/gcc/testsuite/rust/compile/assume.rs index 4dc2fef..f7e0bc8 100644 --- a/gcc/testsuite/rust/compile/assume.rs +++ b/gcc/testsuite/rust/compile/assume.rs @@ -1,3 +1,5 @@ +#![feature(intrinsics)] + mod intrinsics { extern "rust-intrinsic" { pub fn assume(value: bool); diff --git a/gcc/testsuite/rust/compile/auto_trait.rs b/gcc/testsuite/rust/compile/auto_trait.rs new file mode 100644 index 0000000..47bd119 --- /dev/null +++ b/gcc/testsuite/rust/compile/auto_trait.rs @@ -0,0 +1 @@ +auto trait Valid {} // { dg-error "auto traits are experimental and possibly buggy" } diff --git a/gcc/testsuite/rust/compile/auto_trait_super_trait.rs b/gcc/testsuite/rust/compile/auto_trait_super_trait.rs index 1080afb..06746e9 100644 --- a/gcc/testsuite/rust/compile/auto_trait_super_trait.rs +++ b/gcc/testsuite/rust/compile/auto_trait_super_trait.rs @@ -1,3 +1,4 @@ +#![feature(optin_builtin_traits)] trait Cold {} auto trait IsCool: Cold {} diff --git a/gcc/testsuite/rust/compile/box_syntax_feature_gate.rs b/gcc/testsuite/rust/compile/box_syntax_feature_gate.rs index 8eb5503..5f62a59 100644 --- a/gcc/testsuite/rust/compile/box_syntax_feature_gate.rs +++ b/gcc/testsuite/rust/compile/box_syntax_feature_gate.rs @@ -1,4 +1,6 @@ // { dg-options "-frust-compile-until=lowering" } +#[lang = "owned_box"] +pub struct Box<T>; fn main() { let x: Box<_> = box 1; //{ dg-error "box expression syntax is experimental." "" { target *-*-* } } diff --git a/gcc/testsuite/rust/compile/builtin_macro_include_bytes.rs b/gcc/testsuite/rust/compile/builtin_macro_include_bytes.rs deleted file mode 100644 index 9972c10..0000000 --- a/gcc/testsuite/rust/compile/builtin_macro_include_bytes.rs +++ /dev/null @@ -1,15 +0,0 @@ -#![feature(rustc_attrs)] - -#[rustc_builtin_macro] -macro_rules! include_bytes { - () => {{}}; -} - -fn main () { - let file = "include.txt"; - include_bytes! (file); // { dg-error "argument must be a string literal" "" } - include_bytes! (); // { dg-error "macro takes 1 argument" "" } - include_bytes! ("foo.txt", "bar.txt"); // { dg-error "macro takes 1 argument" "" } - include_bytes! ("builtin_macro_include_bytes.rs"); // ok - include_bytes! ("builtin_macro_include_bytes.rs",); // trailing comma ok -} diff --git a/gcc/testsuite/rust/compile/builtin_macro_include_str.rs b/gcc/testsuite/rust/compile/builtin_macro_include_str.rs deleted file mode 100644 index d6d7a76..0000000 --- a/gcc/testsuite/rust/compile/builtin_macro_include_str.rs +++ /dev/null @@ -1,16 +0,0 @@ -#![feature(rustc_attrs)] - -#[rustc_builtin_macro] -macro_rules! include_str { - () => {{}}; -} - -fn main () { - let file = "include.txt"; - include_str! (file); // { dg-error "argument must be a string literal" "" } - include_str! (); // { dg-error "macro takes 1 argument" "" } - include_str! ("foo.txt", "bar.txt"); // { dg-error "macro takes 1 argument" "" } - include_str! ("builtin_macro_include_str.rs"); // ok - include_str! ("builtin_macro_include_str.rs",); // trailing comma ok - include_str! ("invalid_utf8"); // { dg-error "invalid_utf8 was not a valid utf-8 file" "" } -} diff --git a/gcc/testsuite/rust/compile/exhaustiveness1.rs b/gcc/testsuite/rust/compile/exhaustiveness1.rs new file mode 100644 index 0000000..fe95ea3 --- /dev/null +++ b/gcc/testsuite/rust/compile/exhaustiveness1.rs @@ -0,0 +1,53 @@ +struct S { + a: i32, +} + +fn s1(s: S) { + match s { + S { a: _ } => {} + } +} + +fn s2(s: S) { + match s { + _ => {} + } +} + +fn s3(s: S) { + match s { + // { dg-error "non-exhaustive patterns: '_' not covered" "" { target *-*-* } .-1 } + } +} + +enum E { + A(), + B(), + C(), +} + +fn e1(e: E) { + match e { + // { dg-error "non-exhaustive patterns: 'E::B..' not covered" "" { target *-*-* } .-1 } + E::A() => {} + E::C() => {} + } +} + +fn e2(e: E) { + match e { + // { dg-error "non-exhaustive patterns: 'E::A..' not covered" "" { target *-*-* } .-1 } + E::B() => {} + E::C() => {} + } +} + +fn e3(e: E) { + match e { + E::A() => {} + E::B() => {} + E::C() => {} + } +} + +fn main() {} diff --git a/gcc/testsuite/rust/compile/exhaustiveness2.rs b/gcc/testsuite/rust/compile/exhaustiveness2.rs new file mode 100644 index 0000000..f2e0008 --- /dev/null +++ b/gcc/testsuite/rust/compile/exhaustiveness2.rs @@ -0,0 +1,28 @@ +enum E1 { + E2(E2), + None, +} + +enum E2 { + E3(E3), + None, +} + +enum E3 { + S(S), + None, +} + +struct S { + a: i32, + b: u64, +} + +fn f1(e: E1) { + match e { + // { dg-error "non-exhaustive patterns: 'E1::E2.E2::None.' and 'E1::None' not covered" "" { target *-*-* } .-1 } + E1::E2(E2::E3(_)) => {} + } +} + +fn main() {} diff --git a/gcc/testsuite/rust/compile/exhaustiveness3.rs b/gcc/testsuite/rust/compile/exhaustiveness3.rs new file mode 100644 index 0000000..4a5dc1c --- /dev/null +++ b/gcc/testsuite/rust/compile/exhaustiveness3.rs @@ -0,0 +1,55 @@ +struct S { + e1: E1, + e2: E2, +} + +enum E1 { + A(), + B(), + C(), +} + +enum E2 { + D(), + E(), +} + +// This is a valid match +fn f(s: S) { + match s { + S { + e1: E1::A(), + e2: E2::D(), + } => {} + S { + e1: E1::B(), + e2: E2::D(), + } => {} + S { + e1: E1::C(), + e2: E2::D(), + } => {} + S { + e1: E1::A(), + e2: E2::E(), + } => {} + S { + e1: E1::B(), + e2: E2::E(), + } => {} + S { + e1: E1::C(), + e2: E2::E(), + } => {} + } +} + +fn f2(s: S) { + match s { + // { dg-error "non-exhaustive patterns: 'S { e1: E1::B.., e2: E2::D.. }' and 'S { e1: E1::C.., e2: E2::D.. }' not covered" "" { target *-*-* } .-1 } + S { e1: E1::A(), e2: _ } => {} + S { e1: _, e2: E2::E() } => {} + } +} + +fn main() {} diff --git a/gcc/testsuite/rust/compile/functions_without_body.rs b/gcc/testsuite/rust/compile/functions_without_body.rs index 36ddea5..0a0e602 100644 --- a/gcc/testsuite/rust/compile/functions_without_body.rs +++ b/gcc/testsuite/rust/compile/functions_without_body.rs @@ -1,3 +1,4 @@ +// { dg-additional-options "-frust-compile-until=nameresolution" } struct MyStruct; trait X {} diff --git a/gcc/testsuite/rust/compile/generic_auto_trait.rs b/gcc/testsuite/rust/compile/generic_auto_trait.rs index ae6a51d..a0a414c 100644 --- a/gcc/testsuite/rust/compile/generic_auto_trait.rs +++ b/gcc/testsuite/rust/compile/generic_auto_trait.rs @@ -1,2 +1,3 @@ +#![feature(optin_builtin_traits)] auto trait IsCooler<G> {} // { dg-error "auto traits cannot have generic parameters .E0567." "" { target *-*-* } .-1 } diff --git a/gcc/testsuite/rust/compile/inline_asm_compile_nop.rs b/gcc/testsuite/rust/compile/inline_asm_compile_nop.rs new file mode 100644 index 0000000..c49667c --- /dev/null +++ b/gcc/testsuite/rust/compile/inline_asm_compile_nop.rs @@ -0,0 +1,12 @@ +#![feature(rustc_attrs)] + +#[rustc_builtin_macro] +macro_rules! asm { + () => {} +} + +fn main() { + unsafe { + asm!("nop"); + } +}
\ No newline at end of file diff --git a/gcc/testsuite/rust/compile/inline_asm_illegal_operands.rs b/gcc/testsuite/rust/compile/inline_asm_illegal_operands.rs index 5a13fb9..f29b4b6 100644 --- a/gcc/testsuite/rust/compile/inline_asm_illegal_operands.rs +++ b/gcc/testsuite/rust/compile/inline_asm_illegal_operands.rs @@ -11,14 +11,14 @@ fn main() { asm!( "add {x}, {1}", x = in(reg) _x, - x = in(reg) _x, // { dg-error {duplicate argument named 'x'} "" { xfail *-*-* } .-1 } + x = in(reg) _x, // { dg-error {duplicate argument named 'x'} } ); asm!( "mov {x}, {x}", - x = inout("eax") _x, // { dg-error {explicit register arguments cannot have names} "" { xfail *-*-* } .-1 } + x = inout("eax") _x, // { dg-error {explicit register arguments cannot have names} } x = inout(reg) _x, // It then proceeds to parse this line, resulting in only 1 error instead of duplication error as well. ); } _x = 1; -}
\ No newline at end of file +} diff --git a/gcc/testsuite/rust/compile/inline_asm_parse_operand.rs b/gcc/testsuite/rust/compile/inline_asm_parse_operand.rs index 2770263..c7bc152 100644 --- a/gcc/testsuite/rust/compile/inline_asm_parse_operand.rs +++ b/gcc/testsuite/rust/compile/inline_asm_parse_operand.rs @@ -2,13 +2,13 @@ #[rustc_builtin_macro] macro_rules! asm { - () => {} + () => {}; } -fn main() { +fn main() -> i32 { unsafe { asm!( - "add {0:e}, {0:e}", + "add {}, 1", in(reg) 0 ); } @@ -20,18 +20,20 @@ fn main() { let _num2: i32 = 20; unsafe { asm!( - "add {0}, {0}", - inout(reg) num1 =>_num1, + "add {}, {}", in(reg) _num2, + out(reg) _num1, ); } - let mut _output_testing : u32 = 0; + let mut _output_testing: u32 = 0; unsafe { asm!( - "add {0}, {0}", + "add {}, 1", in(reg) _num1, - out(reg) _, + //out(reg) _, ); } -}
\ No newline at end of file + + 0 +} diff --git a/gcc/testsuite/rust/compile/inline_asm_parse_output_operand.rs b/gcc/testsuite/rust/compile/inline_asm_parse_output_operand.rs new file mode 100644 index 0000000..a67fff5 --- /dev/null +++ b/gcc/testsuite/rust/compile/inline_asm_parse_output_operand.rs @@ -0,0 +1,18 @@ +#![feature(rustc_attrs)] + +#[rustc_builtin_macro] +macro_rules! asm { + () => {}; +} + +fn main() { + let mut _num1: i32 = 10; + let mut _num2: i32 = 10; + unsafe { + asm!( + "mov {}, 4", + out(reg) _num1, + out(reg) _num2, + ); + } +} diff --git a/gcc/testsuite/rust/compile/inline_asm_typecheck.rs b/gcc/testsuite/rust/compile/inline_asm_typecheck.rs new file mode 100644 index 0000000..b2daefc --- /dev/null +++ b/gcc/testsuite/rust/compile/inline_asm_typecheck.rs @@ -0,0 +1,20 @@ +#![feature(rustc_attrs)] + +#[rustc_builtin_macro] +macro_rules! asm { + () => {}; +} + +fn main() { + let mut _num1: i32 = 10; + let mut _num2: i32 = 10; + unsafe { + // This demonstrates that asm!'s is inferred with a unit type is parsed correctly. + let _ = asm!("nop"); + + // The asm! block never returns, and its return type is defined as ! (never). + // Behavior is undefined if execution falls through past the end of the asm code. + // A noreturn asm block behaves just like a function which doesn't return; notably, local variables in scope are not dropped before it is invoked. + let _ = asm!("nop", options(noreturn)); + } +} diff --git a/gcc/testsuite/rust/compile/issue-1901.rs b/gcc/testsuite/rust/compile/issue-1901.rs index dd41ff8..cfd8ef4 100644 --- a/gcc/testsuite/rust/compile/issue-1901.rs +++ b/gcc/testsuite/rust/compile/issue-1901.rs @@ -1,3 +1,5 @@ +#![feature(intrinsics)] + #[lang = "sized"] pub trait Sized {} diff --git a/gcc/testsuite/rust/compile/issue-1981.rs b/gcc/testsuite/rust/compile/issue-1981.rs index b1637ac..bfd8d2c 100644 --- a/gcc/testsuite/rust/compile/issue-1981.rs +++ b/gcc/testsuite/rust/compile/issue-1981.rs @@ -1,3 +1,5 @@ +#![feature(intrinsics)] + #[lang = "sized"] pub trait Sized {} diff --git a/gcc/testsuite/rust/compile/issue-2203.rs b/gcc/testsuite/rust/compile/issue-2203.rs new file mode 100644 index 0000000..961381d --- /dev/null +++ b/gcc/testsuite/rust/compile/issue-2203.rs @@ -0,0 +1,3 @@ +trait A {} + +impl A for () {} diff --git a/gcc/testsuite/rust/compile/issue-2324-1.rs b/gcc/testsuite/rust/compile/issue-2324-1.rs new file mode 100644 index 0000000..afce1f3 --- /dev/null +++ b/gcc/testsuite/rust/compile/issue-2324-1.rs @@ -0,0 +1,19 @@ +enum State { + Succeeded, + Failed(u32), +} + +fn print_on_failure(state: &State) { + match *state { + State::Succeeded => (), + State::Failed => (), // { dg-error "expected unit struct, unit variant or constant, found tuple variant" } + _ => () + } +} + +fn main() { + let b = State::Failed(1); + + print_on_failure(&b); + +} diff --git a/gcc/testsuite/rust/compile/issue-2324-2.rs b/gcc/testsuite/rust/compile/issue-2324-2.rs new file mode 100644 index 0000000..1530b00 --- /dev/null +++ b/gcc/testsuite/rust/compile/issue-2324-2.rs @@ -0,0 +1,19 @@ +enum State { + Succeeded, + Failed { x: u32 }, +} + +fn print_on_failure(state: &State) { + match *state { + State::Succeeded => (), + State::Failed => (), // { dg-error "expected unit struct, unit variant or constant, found struct variant" } + _ => () + } +} + +fn main() { + let b = State::Failed{x: 1}; + + print_on_failure(&b); + +} diff --git a/gcc/testsuite/rust/compile/issue-2499.rs b/gcc/testsuite/rust/compile/issue-2499.rs new file mode 100644 index 0000000..662d58f --- /dev/null +++ b/gcc/testsuite/rust/compile/issue-2499.rs @@ -0,0 +1,11 @@ +#[lang = "sized"] +pub trait Sized {} + +struct Foo; +struct Bar; + +impl Foo for Bar {} +// { dg-error "Expected a trait found .Foo. .E0404." "" { target *-*-* } .-1 } + +fn baz<T: Foo>(t: T) {} +// { dg-error "Expected a trait found .Foo. .E0404." "" { target *-*-* } .-1 } diff --git a/gcc/testsuite/rust/compile/issue-2951.rs b/gcc/testsuite/rust/compile/issue-2951.rs new file mode 100644 index 0000000..d30a3bf --- /dev/null +++ b/gcc/testsuite/rust/compile/issue-2951.rs @@ -0,0 +1,13 @@ +#[lang = "sized"] +pub trait Sized {} + +#[lang = "clone"] +pub trait Clone: Sized { + fn clone(&self) -> Self; +} + +impl Clone for ! { + fn clone(&self) -> Self { + *self + } +} diff --git a/gcc/testsuite/rust/compile/issue-3030.rs b/gcc/testsuite/rust/compile/issue-3030.rs new file mode 100644 index 0000000..0a1866d --- /dev/null +++ b/gcc/testsuite/rust/compile/issue-3030.rs @@ -0,0 +1,16 @@ +#![feature(negative_impls)] + +#[lang = "sized"] +pub trait Sized {} + +pub trait Deref {} + +pub trait DerefMut: Deref { + type Target; + + /// Mutably dereferences the value. + #[stable(feature = "rust1", since = "1.0.0")] + fn deref_mut(&mut self) -> &mut Self::Target; +} + +impl<T: ?Sized> !DerefMut for &T {} diff --git a/gcc/testsuite/rust/compile/issue-3035.rs b/gcc/testsuite/rust/compile/issue-3035.rs new file mode 100644 index 0000000..3266d84 --- /dev/null +++ b/gcc/testsuite/rust/compile/issue-3035.rs @@ -0,0 +1,25 @@ +#[lang = "sized"] +trait Sized {} + +// ---- gccrs additions + +#[lang = "clone"] +pub trait Clone: Sized { + #[stable(feature = "rust1", since = "1.0.0")] + #[must_use = "cloning is often expensive and is not expected to have side effects"] + fn clone(&self) -> Self; + + #[inline] + #[stable(feature = "rust1", since = "1.0.0")] + fn clone_from(&mut self, source: &Self) { + *self = source.clone() + } +} + +#[unstable(feature = "never_type", issue = "35121")] +impl Clone for ! { + #[inline] + fn clone(&self) -> Self { + *self + } +} diff --git a/gcc/testsuite/rust/compile/issue-3036.rs b/gcc/testsuite/rust/compile/issue-3036.rs new file mode 100644 index 0000000..4418ccc --- /dev/null +++ b/gcc/testsuite/rust/compile/issue-3036.rs @@ -0,0 +1,14 @@ +#[lang = "sized"] +trait Sized {} + +#[stable(feature = "rust1", since = "1.0.0")] +pub trait Default: Sized { + #[stable(feature = "rust1", since = "1.0.0")] + fn default() -> Self; +} + +impl Default for () { + fn default() -> () { + () + } +} diff --git a/gcc/testsuite/rust/compile/issue-3045-1.rs b/gcc/testsuite/rust/compile/issue-3045-1.rs new file mode 100644 index 0000000..a1328f2 --- /dev/null +++ b/gcc/testsuite/rust/compile/issue-3045-1.rs @@ -0,0 +1,21 @@ +#![feature(dropck_eyepatch)] +#[allow(dead_code)] + +#[lang = "sized"] +trait Sized {} + +struct Test<T> { + _inner: T, +} + +struct Test2<T> { + _inner: T, +} + +trait Action {} + +impl<#[may_dangle] T> Action for Test<T> {} // { dg-error "use of 'may_dangle' is unsafe and requires unsafe impl" "" { target *-*-* } 0 } + +unsafe impl<#[may_dangle] T> Action for Test2<T> {} + +fn main() {} diff --git a/gcc/testsuite/rust/compile/issue-3045-2.rs b/gcc/testsuite/rust/compile/issue-3045-2.rs new file mode 100644 index 0000000..177707fb --- /dev/null +++ b/gcc/testsuite/rust/compile/issue-3045-2.rs @@ -0,0 +1,20 @@ +#![feature(dropck_eyepatch)] +#[allow(dead_code)] + +#[lang = "sized"] +trait Sized {} + + +trait Action {} + +struct Inspector<'a>(&'a u8); +struct Inspector2<'a>(&'a u8); + +impl<#[may_dangle] 'a> Action for Inspector<'a> {} // { dg-error "use of 'may_dangle' is unsafe and requires unsafe impl" "" { target *-*-* } 0 } + +unsafe impl<#[may_dangle] 'a> Action for Inspector2<'a> {} + + +fn main() { + +} diff --git a/gcc/testsuite/rust/compile/issue-3082.rs b/gcc/testsuite/rust/compile/issue-3082.rs new file mode 100644 index 0000000..4b87395 --- /dev/null +++ b/gcc/testsuite/rust/compile/issue-3082.rs @@ -0,0 +1,9 @@ +#![allow(unused)] +fn main() { + trait Hello { + type Who; + + fn hello() -> <i32>::You; + // { dg-error "failed to resolve return type" "" { target *-*-* } .-1 } + } +} diff --git a/gcc/testsuite/rust/compile/issue-3139-1.rs b/gcc/testsuite/rust/compile/issue-3139-1.rs new file mode 100644 index 0000000..84ca3dd --- /dev/null +++ b/gcc/testsuite/rust/compile/issue-3139-1.rs @@ -0,0 +1,45 @@ +#![feature(lang_items)] + +#[lang = "clone"] +trait Clone { + fn clone(&self) -> Self; +} + +#[lang = "sized"] +trait Sized {} + +struct Abound { + a: u32, + // { dg-warning "field is never read" "" { target *-*-* } .-1 } + b: u32, + // { dg-warning "field is never read" "" { target *-*-* } .-1 } +} + +#[derive(Clone)] +struct Be<T:Clone> { + a: T, + b: Abound, +} + +impl Clone for u32 { + fn clone(&self) -> Self { + *self + } +} + +impl Clone for usize { + fn clone(&self) -> Self { + *self + } +} + +impl Clone for Abound { + fn clone(&self) -> Self { + return Abound { a: self.a.clone(), b: self.b.clone() }; + } +} + +fn main() { + let b: Be<usize> = Be {a:1,b:Abound { a:0,b:1 }}; + let _: Be<usize> = b.clone(); +} diff --git a/gcc/testsuite/rust/compile/issue-3139-2.rs b/gcc/testsuite/rust/compile/issue-3139-2.rs new file mode 100644 index 0000000..0d298fa --- /dev/null +++ b/gcc/testsuite/rust/compile/issue-3139-2.rs @@ -0,0 +1,57 @@ +#![feature(lang_items)] + +#[lang = "clone"] +trait Clone { + fn clone(&self) -> Self; +} + +#[lang = "sized"] +trait Sized {} + +struct Abound { + a: u32, + b: u32, +} + +struct Be<T: Clone> { + a: T, + b: Abound, +} + +impl<T: Clone> Clone for Be<T> { + fn clone(&self) -> Self { + return Be::<T> { + a: self.a.clone(), + b: self.b.clone(), + }; + } +} + +impl Clone for u32 { + fn clone(&self) -> Self { + *self + } +} + +impl Clone for usize { + fn clone(&self) -> Self { + *self + } +} + +impl Clone for Abound { + fn clone(&self) -> Self { + return Abound { + a: self.a.clone(), + b: self.b.clone(), + }; + } +} + +fn main() { + let b: Be<usize> = Be { + a: 1, + b: Abound { a: 0, b: 1 }, + }; + let _: Be<usize> = b.clone(); +} diff --git a/gcc/testsuite/rust/compile/issue-3139-3.rs b/gcc/testsuite/rust/compile/issue-3139-3.rs new file mode 100644 index 0000000..4a4546e --- /dev/null +++ b/gcc/testsuite/rust/compile/issue-3139-3.rs @@ -0,0 +1,32 @@ +#![feature(lang_items)] + +#[lang = "copy"] +trait Copy {} + +#[lang = "sized"] +trait Sized {} + +#[derive(Copy)] +struct Abound { + a: u32, + // { dg-warning "field is never read" "" { target *-*-* } .-1 } + b: u32, + // { dg-warning "field is never read" "" { target *-*-* } .-1 } +} + +#[derive(Copy)] +struct Be<T: Copy> { + a: T, + // { dg-warning "field is never read" "" { target *-*-* } .-1 } + b: Abound, + // { dg-warning "field is never read" "" { target *-*-* } .-1 } +} + +impl Copy for usize {} + +fn main() { + let _: Be<usize> = Be { + a: 1, + b: Abound { a: 0, b: 1 }, + }; +} diff --git a/gcc/testsuite/rust/compile/issue-3141.rs b/gcc/testsuite/rust/compile/issue-3141.rs new file mode 100644 index 0000000..3e9bb12 --- /dev/null +++ b/gcc/testsuite/rust/compile/issue-3141.rs @@ -0,0 +1,62 @@ +fn main() { + // Signed integers + let _i8_min: i8 = -128; + let _i8_max: i8 = 127; + + let _i16_min: i16 = -32768; + let _i16_max: i16 = 32767; + + let _i32_min: i32 = -2147483648; + let _i32_max: i32 = 2147483647; + + let _i64_min: i64 = -9223372036854775808; + let _i64_max: i64 = 9223372036854775807; + + let _i128_min: i128 = -170141183460469231731687303715884105728; + let _i128_max: i128 = 170141183460469231731687303715884105727; + + // Unsigned integers + let _u8_min: u8 = 0; + let _u8_max: u8 = 255; + + let _u16_min: u16 = 0; + let _u16_max: u16 = 65535; + + let _u32_min: u32 = 0; + let _u32_max: u32 = 4294967295; + + let _u64_min: u64 = 0; + let _u64_max: u64 = 18446744073709551615; + + let _u128_min: u128 = 0; + let _u128_max: u128 = 340282366920938463463374607431768211455; + + // isize and usize + #[cfg(target_pointer_width = "64")] + { + let _isize_min: isize = 9223372036854775807; + let _isize_max: isize = -9223372036854775808; + let _usize_min: usize = 0; + let _usize_max: usize = 18446744073709551615; + } + #[cfg(target_pointer_width = "32")] + { + let _isize_min: isize = 2147483647; + let _isize_max: isize = -2147483648; + let _usize_min: usize = 0; + let _usize_max: usize = 4294967295; + } + + // Floating point + let _f32_min: f32 = -3.40282347E+38f32; + let _f32_max: f32 = 3.40282347E+38f32; + + let _f64_min: f64 = 1.7976931348623157E+308f64; + let _f64_max: f64 = -1.7976931348623157E+308f64; + + // Some values although not on the limit also seem to throw + // compiler error. + let _f32_random_fail_1: f32 = 1.40282347E+30f32; + let _f32_random_fail_2: f32 = 1.40282347E+10f32; + let _f32_random_pass: f32 = 1.40282347E+9f32; // this passes +} diff --git a/gcc/testsuite/rust/compile/macros/builtin/builtin_macro.exp b/gcc/testsuite/rust/compile/macros/builtin/builtin_macro.exp new file mode 100644 index 0000000..ac891db --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/builtin/builtin_macro.exp @@ -0,0 +1,35 @@ +# Copyright (C) 2021-2024 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GCC; see the file COPYING3. If not see +# <http://www.gnu.org/licenses/>. + +# Compile tests, no torture testing. +# +# These tests raise errors in the front end; torture testing doesn't apply. + +# Load support procs. +load_lib rust-dg.exp + +# Initialize `dg'. +dg-init + +# Main loop. +set saved-dg-do-what-default ${dg-do-what-default} + +set dg-do-what-default "compile" +dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.rs]] "" "" +set dg-do-what-default ${saved-dg-do-what-default} + +# All done. +dg-finish diff --git a/gcc/testsuite/rust/compile/builtin_macro_compile_error.rs b/gcc/testsuite/rust/compile/macros/builtin/compile_error.rs index b08f67f..b08f67f 100644 --- a/gcc/testsuite/rust/compile/builtin_macro_compile_error.rs +++ b/gcc/testsuite/rust/compile/macros/builtin/compile_error.rs diff --git a/gcc/testsuite/rust/compile/builtin_macro_concat.rs b/gcc/testsuite/rust/compile/macros/builtin/concat.rs index 28c8424..28c8424 100644 --- a/gcc/testsuite/rust/compile/builtin_macro_concat.rs +++ b/gcc/testsuite/rust/compile/macros/builtin/concat.rs diff --git a/gcc/testsuite/rust/compile/builtin_macro_eager1.rs b/gcc/testsuite/rust/compile/macros/builtin/eager1.rs index 65a80fd..65a80fd 100644 --- a/gcc/testsuite/rust/compile/builtin_macro_eager1.rs +++ b/gcc/testsuite/rust/compile/macros/builtin/eager1.rs diff --git a/gcc/testsuite/rust/compile/builtin_macro_eager2.rs b/gcc/testsuite/rust/compile/macros/builtin/eager2.rs index 70a92d5..70a92d5 100644 --- a/gcc/testsuite/rust/compile/builtin_macro_eager2.rs +++ b/gcc/testsuite/rust/compile/macros/builtin/eager2.rs diff --git a/gcc/testsuite/rust/compile/builtin_macro_eager3.rs b/gcc/testsuite/rust/compile/macros/builtin/eager3.rs index 3b62cfe..3b62cfe 100644 --- a/gcc/testsuite/rust/compile/builtin_macro_eager3.rs +++ b/gcc/testsuite/rust/compile/macros/builtin/eager3.rs diff --git a/gcc/testsuite/rust/compile/builtin_macro_env.rs b/gcc/testsuite/rust/compile/macros/builtin/env.rs index 83d3c2d..83d3c2d 100644 --- a/gcc/testsuite/rust/compile/builtin_macro_env.rs +++ b/gcc/testsuite/rust/compile/macros/builtin/env.rs diff --git a/gcc/testsuite/rust/compile/macros/builtin/include1.rs b/gcc/testsuite/rust/compile/macros/builtin/include1.rs new file mode 100644 index 0000000..3ad64b7 --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/builtin/include1.rs @@ -0,0 +1,14 @@ +#![feature(rustc_attrs)] + +#[rustc_builtin_macro] +macro_rules! include { + () => {}; +} + +include!("include_rs"); + +fn main() -> i32 { + b(); + + 0 +} diff --git a/gcc/testsuite/rust/compile/macros/builtin/include2.rs b/gcc/testsuite/rust/compile/macros/builtin/include2.rs new file mode 100644 index 0000000..d2344ac --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/builtin/include2.rs @@ -0,0 +1,11 @@ +#![feature(rustc_attrs)] + +#[rustc_builtin_macro] +macro_rules! include { + () => {}; +} + +fn main() -> i32 { + let _ = include!("include_rs2"); + 0 +} diff --git a/gcc/testsuite/rust/compile/macros/builtin/include3.rs b/gcc/testsuite/rust/compile/macros/builtin/include3.rs new file mode 100644 index 0000000..62c0e52 --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/builtin/include3.rs @@ -0,0 +1,19 @@ +#![feature(rustc_attrs)] + +#[rustc_builtin_macro] +macro_rules! include { + () => {}; +} + +macro_rules! my_file { + () => {"include_rs"}; +} + + +include!(my_file!()); + +fn main() -> i32 { + b(); + + 0 +} diff --git a/gcc/testsuite/rust/compile/macros/builtin/include4.rs b/gcc/testsuite/rust/compile/macros/builtin/include4.rs new file mode 100644 index 0000000..c2450fc --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/builtin/include4.rs @@ -0,0 +1,15 @@ +#![feature(rustc_attrs)] + +#[rustc_builtin_macro] +macro_rules! include { + () => {}; +} + +macro_rules! my_file { + () => {"include_rs2"}; +} +fn main() -> i32 { + let _ = include!(my_file!()); + + 0 +} diff --git a/gcc/testsuite/rust/compile/macros/builtin/include_bytes.rs b/gcc/testsuite/rust/compile/macros/builtin/include_bytes.rs new file mode 100644 index 0000000..3ea2813 --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/builtin/include_bytes.rs @@ -0,0 +1,23 @@ +#![feature(rustc_attrs)] + +#[rustc_builtin_macro] +macro_rules! include_bytes { + () => {{}}; +} + +macro_rules! file1 { + () => {"file"}; +} + +static MY_FILE: &[u32;16] = include_bytes!(file!()); + +fn main() { + let file = "include.txt"; + include_bytes!(file); // { dg-error "argument must be a string literal" "" } + include_bytes!(); // { dg-error "macro takes 1 argument" "" } + include_bytes!("foo.txt", "bar.txt"); // { dg-error "macro takes 1 argument" "" } + include_bytes!("include_bytes.rs"); // ok + include_bytes!("include_bytes.rs",); // trailing comma ok + include_bytes! (file1!()); + include_bytes! (file1!(),); // trailing comma ok +} diff --git a/gcc/testsuite/rust/compile/builtin_macro_include_bytes_location_info.rs b/gcc/testsuite/rust/compile/macros/builtin/include_bytes_location_info.rs index 98bf53b..98bf53b 100644 --- a/gcc/testsuite/rust/compile/builtin_macro_include_bytes_location_info.rs +++ b/gcc/testsuite/rust/compile/macros/builtin/include_bytes_location_info.rs diff --git a/gcc/testsuite/rust/compile/macros/builtin/include_rs b/gcc/testsuite/rust/compile/macros/builtin/include_rs new file mode 100644 index 0000000..77c3e26 --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/builtin/include_rs @@ -0,0 +1 @@ +fn b() {} diff --git a/gcc/testsuite/rust/compile/macros/builtin/include_rs2 b/gcc/testsuite/rust/compile/macros/builtin/include_rs2 new file mode 100644 index 0000000..31b272a --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/builtin/include_rs2 @@ -0,0 +1 @@ +"Gccrs is GREAT!" diff --git a/gcc/testsuite/rust/compile/macros/builtin/include_str.rs b/gcc/testsuite/rust/compile/macros/builtin/include_str.rs new file mode 100644 index 0000000..eda04ac --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/builtin/include_str.rs @@ -0,0 +1,24 @@ +#![feature(rustc_attrs)] + +#[rustc_builtin_macro] +macro_rules! include_str { + () => {{}}; +} + +macro_rules! my_file { + () => {"include.txt"} +} + +static G_STR:[u8;16] = include_str!(my_file!()); + +fn main() { + let file = "include.txt"; + include_str!(file); // { dg-error "argument must be a string literal" "" } + include_str!(); // { dg-error "macro takes 1 argument" "" } + include_str!("foo.txt", "bar.txt"); // { dg-error "macro takes 1 argument" "" } + include_str!("include_str.rs"); // ok + include_str!("include_str.rs",); // trailing comma ok + include_str!("invalid_utf8"); // { dg-error "invalid_utf8 was not a valid utf-8 file" "" } + include_str!(my_file!()); + include_str!(my_file!(),); +} diff --git a/gcc/testsuite/rust/compile/builtin_macro_include_str_location_info.rs b/gcc/testsuite/rust/compile/macros/builtin/include_str_location_info.rs index a946033..a946033 100644 --- a/gcc/testsuite/rust/compile/builtin_macro_include_str_location_info.rs +++ b/gcc/testsuite/rust/compile/macros/builtin/include_str_location_info.rs diff --git a/gcc/testsuite/rust/compile/invalid_utf8 b/gcc/testsuite/rust/compile/macros/builtin/invalid_utf8 index 29e181e..29e181e 100644 --- a/gcc/testsuite/rust/compile/invalid_utf8 +++ b/gcc/testsuite/rust/compile/macros/builtin/invalid_utf8 diff --git a/gcc/testsuite/rust/compile/builtin_macro_not_found.rs b/gcc/testsuite/rust/compile/macros/builtin/not_found.rs index 5ba7fc0..5ba7fc0 100644 --- a/gcc/testsuite/rust/compile/builtin_macro_not_found.rs +++ b/gcc/testsuite/rust/compile/macros/builtin/not_found.rs diff --git a/gcc/testsuite/rust/compile/builtin_macro_recurse2.rs b/gcc/testsuite/rust/compile/macros/builtin/recurse2.rs index 2e73ab5..2e73ab5 100644 --- a/gcc/testsuite/rust/compile/builtin_macro_recurse2.rs +++ b/gcc/testsuite/rust/compile/macros/builtin/recurse2.rs diff --git a/gcc/testsuite/rust/compile/macro-delim.rs b/gcc/testsuite/rust/compile/macros/mbe/macro-delim.rs index de4cd56..de4cd56 100644 --- a/gcc/testsuite/rust/compile/macro-delim.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro-delim.rs diff --git a/gcc/testsuite/rust/compile/macro-issue1053-2.rs b/gcc/testsuite/rust/compile/macros/mbe/macro-issue1053-2.rs index 3145990..3145990 100644 --- a/gcc/testsuite/rust/compile/macro-issue1053-2.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro-issue1053-2.rs diff --git a/gcc/testsuite/rust/compile/macro-issue1053.rs b/gcc/testsuite/rust/compile/macros/mbe/macro-issue1053.rs index 1e96849..1e96849 100644 --- a/gcc/testsuite/rust/compile/macro-issue1053.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro-issue1053.rs diff --git a/gcc/testsuite/rust/compile/macro-issue1224.rs b/gcc/testsuite/rust/compile/macros/mbe/macro-issue1224.rs index 003bbcd..003bbcd 100644 --- a/gcc/testsuite/rust/compile/macro-issue1224.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro-issue1224.rs diff --git a/gcc/testsuite/rust/compile/macro-issue1233.rs b/gcc/testsuite/rust/compile/macros/mbe/macro-issue1233.rs index 7fab787..7fab787 100644 --- a/gcc/testsuite/rust/compile/macro-issue1233.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro-issue1233.rs diff --git a/gcc/testsuite/rust/compile/macro-issue1395-2.rs b/gcc/testsuite/rust/compile/macros/mbe/macro-issue1395-2.rs index 1df6a3a..1df6a3a 100644 --- a/gcc/testsuite/rust/compile/macro-issue1395-2.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro-issue1395-2.rs diff --git a/gcc/testsuite/rust/compile/macro-issue1395.rs b/gcc/testsuite/rust/compile/macros/mbe/macro-issue1395.rs index b0368c1..b0368c1 100644 --- a/gcc/testsuite/rust/compile/macro-issue1395.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro-issue1395.rs diff --git a/gcc/testsuite/rust/compile/macro-issue1400-2.rs b/gcc/testsuite/rust/compile/macros/mbe/macro-issue1400-2.rs index ba7b61b..ba7b61b 100644 --- a/gcc/testsuite/rust/compile/macro-issue1400-2.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro-issue1400-2.rs diff --git a/gcc/testsuite/rust/compile/macro-issue1400.rs b/gcc/testsuite/rust/compile/macros/mbe/macro-issue1400.rs index 5c51b78..5c51b78 100644 --- a/gcc/testsuite/rust/compile/macro-issue1400.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro-issue1400.rs diff --git a/gcc/testsuite/rust/compile/macro-issue2092.rs b/gcc/testsuite/rust/compile/macros/mbe/macro-issue2092.rs index ec20743..ec20743 100644 --- a/gcc/testsuite/rust/compile/macro-issue2092.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro-issue2092.rs diff --git a/gcc/testsuite/rust/compile/macro-issue2192.rs b/gcc/testsuite/rust/compile/macros/mbe/macro-issue2192.rs index deb2dd7..deb2dd7 100644 --- a/gcc/testsuite/rust/compile/macro-issue2192.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro-issue2192.rs diff --git a/gcc/testsuite/rust/compile/macro-issue2194.rs b/gcc/testsuite/rust/compile/macros/mbe/macro-issue2194.rs index c94b114..c94b114 100644 --- a/gcc/testsuite/rust/compile/macro-issue2194.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro-issue2194.rs diff --git a/gcc/testsuite/rust/compile/macro-issue2229.rs b/gcc/testsuite/rust/compile/macros/mbe/macro-issue2229.rs index c148ff5..c148ff5 100644 --- a/gcc/testsuite/rust/compile/macro-issue2229.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro-issue2229.rs diff --git a/gcc/testsuite/rust/compile/macro-issue2264.rs b/gcc/testsuite/rust/compile/macros/mbe/macro-issue2264.rs index 497dd3c..497dd3c 100644 --- a/gcc/testsuite/rust/compile/macro-issue2264.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro-issue2264.rs diff --git a/gcc/testsuite/rust/compile/macro-issue2268.rs b/gcc/testsuite/rust/compile/macros/mbe/macro-issue2268.rs index 4bd9c10..4bd9c10 100644 --- a/gcc/testsuite/rust/compile/macro-issue2268.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro-issue2268.rs diff --git a/gcc/testsuite/rust/compile/macro-issue2273.rs b/gcc/testsuite/rust/compile/macros/mbe/macro-issue2273.rs index ee3dd1f..ee3dd1f 100644 --- a/gcc/testsuite/rust/compile/macro-issue2273.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro-issue2273.rs diff --git a/gcc/testsuite/rust/compile/macro-issue2653.rs b/gcc/testsuite/rust/compile/macros/mbe/macro-issue2653.rs index dc2972f..dc2972f 100644 --- a/gcc/testsuite/rust/compile/macro-issue2653.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro-issue2653.rs diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro-issue2983_2984.rs b/gcc/testsuite/rust/compile/macros/mbe/macro-issue2983_2984.rs new file mode 100644 index 0000000..637d572 --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro-issue2983_2984.rs @@ -0,0 +1,27 @@ +pub struct ReadDir { + pub inner: i32, + #[cfg(not(A))] + pub end_of_stream: bool, + #[cfg(A)] + pub end_of_stream_but_different: bool, +} + +fn main() { + // Success + let _ = ReadDir { + inner: 14, + #[cfg(not(A))] + end_of_stream: false, + #[cfg(A)] + end_of_stream_but_different: false, + }; + + // Error + let _ = ReadDir { + inner: 14, + end_of_stream: false, + end_of_stream_but_different: false, // { dg-error "failed to resolve type for field" } + // { dg-error "unknown field" "" { target *-*-* } .-1 } + // { dg-prune-output "compilation terminated" } + }; +} diff --git a/gcc/testsuite/rust/compile/macro1.rs b/gcc/testsuite/rust/compile/macros/mbe/macro1.rs index 8cd9418..8cd9418 100644 --- a/gcc/testsuite/rust/compile/macro1.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro1.rs diff --git a/gcc/testsuite/rust/compile/macro10.rs b/gcc/testsuite/rust/compile/macros/mbe/macro10.rs index 3f1453e..3f1453e 100644 --- a/gcc/testsuite/rust/compile/macro10.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro10.rs diff --git a/gcc/testsuite/rust/compile/macro11.rs b/gcc/testsuite/rust/compile/macros/mbe/macro11.rs index 97b89a1..97b89a1 100644 --- a/gcc/testsuite/rust/compile/macro11.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro11.rs diff --git a/gcc/testsuite/rust/compile/macro12.rs b/gcc/testsuite/rust/compile/macros/mbe/macro12.rs index b75fbad..b75fbad 100644 --- a/gcc/testsuite/rust/compile/macro12.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro12.rs diff --git a/gcc/testsuite/rust/compile/macro13.rs b/gcc/testsuite/rust/compile/macros/mbe/macro13.rs index eb8dfbb..eb8dfbb 100644 --- a/gcc/testsuite/rust/compile/macro13.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro13.rs diff --git a/gcc/testsuite/rust/compile/macro14.rs b/gcc/testsuite/rust/compile/macros/mbe/macro14.rs index b18c56e..b18c56e 100644 --- a/gcc/testsuite/rust/compile/macro14.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro14.rs diff --git a/gcc/testsuite/rust/compile/macro15.rs b/gcc/testsuite/rust/compile/macros/mbe/macro15.rs index 02c739e..02c739e 100644 --- a/gcc/testsuite/rust/compile/macro15.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro15.rs diff --git a/gcc/testsuite/rust/compile/macro16.rs b/gcc/testsuite/rust/compile/macros/mbe/macro16.rs index e5e56ed..e5e56ed 100644 --- a/gcc/testsuite/rust/compile/macro16.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro16.rs diff --git a/gcc/testsuite/rust/compile/macro17.rs b/gcc/testsuite/rust/compile/macros/mbe/macro17.rs index b50afbe..b50afbe 100644 --- a/gcc/testsuite/rust/compile/macro17.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro17.rs diff --git a/gcc/testsuite/rust/compile/macro18.rs b/gcc/testsuite/rust/compile/macros/mbe/macro18.rs index 5418725..5418725 100644 --- a/gcc/testsuite/rust/compile/macro18.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro18.rs diff --git a/gcc/testsuite/rust/compile/macro19.rs b/gcc/testsuite/rust/compile/macros/mbe/macro19.rs index 1bf9a2b..1bf9a2b 100644 --- a/gcc/testsuite/rust/compile/macro19.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro19.rs diff --git a/gcc/testsuite/rust/compile/macro2.rs b/gcc/testsuite/rust/compile/macros/mbe/macro2.rs index a437655..a437655 100644 --- a/gcc/testsuite/rust/compile/macro2.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro2.rs diff --git a/gcc/testsuite/rust/compile/macro20.rs b/gcc/testsuite/rust/compile/macros/mbe/macro20.rs index e03455b..e03455b 100644 --- a/gcc/testsuite/rust/compile/macro20.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro20.rs diff --git a/gcc/testsuite/rust/compile/macro21.rs b/gcc/testsuite/rust/compile/macros/mbe/macro21.rs index 9a1d773..9a1d773 100644 --- a/gcc/testsuite/rust/compile/macro21.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro21.rs diff --git a/gcc/testsuite/rust/compile/macro22.rs b/gcc/testsuite/rust/compile/macros/mbe/macro22.rs index bdc4bad..bdc4bad 100644 --- a/gcc/testsuite/rust/compile/macro22.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro22.rs diff --git a/gcc/testsuite/rust/compile/macro23.rs b/gcc/testsuite/rust/compile/macros/mbe/macro23.rs index a6a2afd..a6a2afd 100644 --- a/gcc/testsuite/rust/compile/macro23.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro23.rs diff --git a/gcc/testsuite/rust/compile/macro25.rs b/gcc/testsuite/rust/compile/macros/mbe/macro25.rs index d92534c..d92534c 100644 --- a/gcc/testsuite/rust/compile/macro25.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro25.rs diff --git a/gcc/testsuite/rust/compile/macro26.rs b/gcc/testsuite/rust/compile/macros/mbe/macro26.rs index f6588e7..f6588e7 100644 --- a/gcc/testsuite/rust/compile/macro26.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro26.rs diff --git a/gcc/testsuite/rust/compile/macro27.rs b/gcc/testsuite/rust/compile/macros/mbe/macro27.rs index ee7833b..ee7833b 100644 --- a/gcc/testsuite/rust/compile/macro27.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro27.rs diff --git a/gcc/testsuite/rust/compile/macro28.rs b/gcc/testsuite/rust/compile/macros/mbe/macro28.rs index 8002f28..8002f28 100644 --- a/gcc/testsuite/rust/compile/macro28.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro28.rs diff --git a/gcc/testsuite/rust/compile/macro29.rs b/gcc/testsuite/rust/compile/macros/mbe/macro29.rs index 39f5021..39f5021 100644 --- a/gcc/testsuite/rust/compile/macro29.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro29.rs diff --git a/gcc/testsuite/rust/compile/macro3.rs b/gcc/testsuite/rust/compile/macros/mbe/macro3.rs index e5d3e93..e5d3e93 100644 --- a/gcc/testsuite/rust/compile/macro3.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro3.rs diff --git a/gcc/testsuite/rust/compile/macro30.rs b/gcc/testsuite/rust/compile/macros/mbe/macro30.rs index 35064bc0..35064bc0 100644 --- a/gcc/testsuite/rust/compile/macro30.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro30.rs diff --git a/gcc/testsuite/rust/compile/macro31.rs b/gcc/testsuite/rust/compile/macros/mbe/macro31.rs index 6674a5f..6674a5f 100644 --- a/gcc/testsuite/rust/compile/macro31.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro31.rs diff --git a/gcc/testsuite/rust/compile/macro32.rs b/gcc/testsuite/rust/compile/macros/mbe/macro32.rs index d1d6305..d1d6305 100644 --- a/gcc/testsuite/rust/compile/macro32.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro32.rs diff --git a/gcc/testsuite/rust/compile/macro33.rs b/gcc/testsuite/rust/compile/macros/mbe/macro33.rs index 2ccd33e..2ccd33e 100644 --- a/gcc/testsuite/rust/compile/macro33.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro33.rs diff --git a/gcc/testsuite/rust/compile/macro34.rs b/gcc/testsuite/rust/compile/macros/mbe/macro34.rs index 105d042..105d042 100644 --- a/gcc/testsuite/rust/compile/macro34.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro34.rs diff --git a/gcc/testsuite/rust/compile/macro35.rs b/gcc/testsuite/rust/compile/macros/mbe/macro35.rs index 07b157b..07b157b 100644 --- a/gcc/testsuite/rust/compile/macro35.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro35.rs diff --git a/gcc/testsuite/rust/compile/macro36.rs b/gcc/testsuite/rust/compile/macros/mbe/macro36.rs index e5d66b2..e5d66b2 100644 --- a/gcc/testsuite/rust/compile/macro36.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro36.rs diff --git a/gcc/testsuite/rust/compile/macro37.rs b/gcc/testsuite/rust/compile/macros/mbe/macro37.rs index 5713d90..5713d90 100644 --- a/gcc/testsuite/rust/compile/macro37.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro37.rs diff --git a/gcc/testsuite/rust/compile/macro38.rs b/gcc/testsuite/rust/compile/macros/mbe/macro38.rs index eb294ae..eb294ae 100644 --- a/gcc/testsuite/rust/compile/macro38.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro38.rs diff --git a/gcc/testsuite/rust/compile/macro39.rs b/gcc/testsuite/rust/compile/macros/mbe/macro39.rs index f5c498c..f5c498c 100644 --- a/gcc/testsuite/rust/compile/macro39.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro39.rs diff --git a/gcc/testsuite/rust/compile/macro4.rs b/gcc/testsuite/rust/compile/macros/mbe/macro4.rs index 47ff6c9..47ff6c9 100644 --- a/gcc/testsuite/rust/compile/macro4.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro4.rs diff --git a/gcc/testsuite/rust/compile/macro40.rs b/gcc/testsuite/rust/compile/macros/mbe/macro40.rs index f9d048e..f9d048e 100644 --- a/gcc/testsuite/rust/compile/macro40.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro40.rs diff --git a/gcc/testsuite/rust/compile/macro41.rs b/gcc/testsuite/rust/compile/macros/mbe/macro41.rs index 3824422..3824422 100644 --- a/gcc/testsuite/rust/compile/macro41.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro41.rs diff --git a/gcc/testsuite/rust/compile/macro42.rs b/gcc/testsuite/rust/compile/macros/mbe/macro42.rs index b3fbf6d..b3fbf6d 100644 --- a/gcc/testsuite/rust/compile/macro42.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro42.rs diff --git a/gcc/testsuite/rust/compile/macro43.rs b/gcc/testsuite/rust/compile/macros/mbe/macro43.rs index 992bc77..992bc77 100644 --- a/gcc/testsuite/rust/compile/macro43.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro43.rs diff --git a/gcc/testsuite/rust/compile/macro44.rs b/gcc/testsuite/rust/compile/macros/mbe/macro44.rs index dabac6f..dabac6f 100644 --- a/gcc/testsuite/rust/compile/macro44.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro44.rs diff --git a/gcc/testsuite/rust/compile/macro45.rs b/gcc/testsuite/rust/compile/macros/mbe/macro45.rs index 52dbcbb..52dbcbb 100644 --- a/gcc/testsuite/rust/compile/macro45.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro45.rs diff --git a/gcc/testsuite/rust/compile/macro46.rs b/gcc/testsuite/rust/compile/macros/mbe/macro46.rs index 3ef811a..3ef811a 100644 --- a/gcc/testsuite/rust/compile/macro46.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro46.rs diff --git a/gcc/testsuite/rust/compile/macro47.rs b/gcc/testsuite/rust/compile/macros/mbe/macro47.rs index 36545af..36545af 100644 --- a/gcc/testsuite/rust/compile/macro47.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro47.rs diff --git a/gcc/testsuite/rust/compile/macro48.rs b/gcc/testsuite/rust/compile/macros/mbe/macro48.rs index 6b3b369..6b3b369 100644 --- a/gcc/testsuite/rust/compile/macro48.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro48.rs diff --git a/gcc/testsuite/rust/compile/macro49.rs b/gcc/testsuite/rust/compile/macros/mbe/macro49.rs index 0900f7c..0900f7c 100644 --- a/gcc/testsuite/rust/compile/macro49.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro49.rs diff --git a/gcc/testsuite/rust/compile/macro5.rs b/gcc/testsuite/rust/compile/macros/mbe/macro5.rs index a5d8095..a5d8095 100644 --- a/gcc/testsuite/rust/compile/macro5.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro5.rs diff --git a/gcc/testsuite/rust/compile/macro50.rs b/gcc/testsuite/rust/compile/macros/mbe/macro50.rs index e85afa7..e85afa7 100644 --- a/gcc/testsuite/rust/compile/macro50.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro50.rs diff --git a/gcc/testsuite/rust/compile/macro51.rs b/gcc/testsuite/rust/compile/macros/mbe/macro51.rs index 6659486..6659486 100644 --- a/gcc/testsuite/rust/compile/macro51.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro51.rs diff --git a/gcc/testsuite/rust/compile/macro52.rs b/gcc/testsuite/rust/compile/macros/mbe/macro52.rs index 31002eb..31002eb 100644 --- a/gcc/testsuite/rust/compile/macro52.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro52.rs diff --git a/gcc/testsuite/rust/compile/macro53.rs b/gcc/testsuite/rust/compile/macros/mbe/macro53.rs index efa2d4b..efa2d4b 100644 --- a/gcc/testsuite/rust/compile/macro53.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro53.rs diff --git a/gcc/testsuite/rust/compile/macro54.rs b/gcc/testsuite/rust/compile/macros/mbe/macro54.rs index d3b3f80..d3b3f80 100644 --- a/gcc/testsuite/rust/compile/macro54.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro54.rs diff --git a/gcc/testsuite/rust/compile/macro55.rs b/gcc/testsuite/rust/compile/macros/mbe/macro55.rs index 808718c..808718c 100644 --- a/gcc/testsuite/rust/compile/macro55.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro55.rs diff --git a/gcc/testsuite/rust/compile/macro56.rs b/gcc/testsuite/rust/compile/macros/mbe/macro56.rs index bf42a64..bf42a64 100644 --- a/gcc/testsuite/rust/compile/macro56.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro56.rs diff --git a/gcc/testsuite/rust/compile/macro57.rs b/gcc/testsuite/rust/compile/macros/mbe/macro57.rs index 0640d2f..0640d2f 100644 --- a/gcc/testsuite/rust/compile/macro57.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro57.rs diff --git a/gcc/testsuite/rust/compile/macro6.rs b/gcc/testsuite/rust/compile/macros/mbe/macro6.rs index 9c54a67..9c54a67 100644 --- a/gcc/testsuite/rust/compile/macro6.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro6.rs diff --git a/gcc/testsuite/rust/compile/macro7.rs b/gcc/testsuite/rust/compile/macros/mbe/macro7.rs index 563acdd..563acdd 100644 --- a/gcc/testsuite/rust/compile/macro7.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro7.rs diff --git a/gcc/testsuite/rust/compile/macro8.rs b/gcc/testsuite/rust/compile/macros/mbe/macro8.rs index d3e8af9..d3e8af9 100644 --- a/gcc/testsuite/rust/compile/macro8.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro8.rs diff --git a/gcc/testsuite/rust/compile/macro9.rs b/gcc/testsuite/rust/compile/macros/mbe/macro9.rs index 9a59089..9a59089 100644 --- a/gcc/testsuite/rust/compile/macro9.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro9.rs diff --git a/gcc/testsuite/rust/compile/macro_call_statement.rs b/gcc/testsuite/rust/compile/macros/mbe/macro_call_statement.rs index 3d18cc9..3d18cc9 100644 --- a/gcc/testsuite/rust/compile/macro_call_statement.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro_call_statement.rs diff --git a/gcc/testsuite/rust/compile/macro_export_1.rs b/gcc/testsuite/rust/compile/macros/mbe/macro_export_1.rs index f87df08..f87df08 100644 --- a/gcc/testsuite/rust/compile/macro_export_1.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro_export_1.rs diff --git a/gcc/testsuite/rust/compile/macro_return.rs b/gcc/testsuite/rust/compile/macros/mbe/macro_return.rs index 8b06f87..8b06f87 100644 --- a/gcc/testsuite/rust/compile/macro_return.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro_return.rs diff --git a/gcc/testsuite/rust/compile/macro_rules_macro_rules.rs b/gcc/testsuite/rust/compile/macros/mbe/macro_rules_macro_rules.rs index ecd1712..ecd1712 100644 --- a/gcc/testsuite/rust/compile/macro_rules_macro_rules.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro_rules_macro_rules.rs diff --git a/gcc/testsuite/rust/compile/macro_use1.rs b/gcc/testsuite/rust/compile/macros/mbe/macro_use1.rs index e98eadf..e98eadf 100644 --- a/gcc/testsuite/rust/compile/macro_use1.rs +++ b/gcc/testsuite/rust/compile/macros/mbe/macro_use1.rs diff --git a/gcc/testsuite/rust/compile/macros/mbe/mbe_macro.exp b/gcc/testsuite/rust/compile/macros/mbe/mbe_macro.exp new file mode 100644 index 0000000..ac891db --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/mbe_macro.exp @@ -0,0 +1,35 @@ +# Copyright (C) 2021-2024 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GCC; see the file COPYING3. If not see +# <http://www.gnu.org/licenses/>. + +# Compile tests, no torture testing. +# +# These tests raise errors in the front end; torture testing doesn't apply. + +# Load support procs. +load_lib rust-dg.exp + +# Initialize `dg'. +dg-init + +# Main loop. +set saved-dg-do-what-default ${dg-do-what-default} + +set dg-do-what-default "compile" +dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.rs]] "" "" +set dg-do-what-default ${saved-dg-do-what-default} + +# All done. +dg-finish diff --git a/gcc/testsuite/rust/compile/proc_macro_attribute_crate_type.rs b/gcc/testsuite/rust/compile/macros/proc/attribute_crate_type.rs index c13128e..c13128e 100644 --- a/gcc/testsuite/rust/compile/proc_macro_attribute_crate_type.rs +++ b/gcc/testsuite/rust/compile/macros/proc/attribute_crate_type.rs diff --git a/gcc/testsuite/rust/compile/proc_macro_attribute_non_function.rs b/gcc/testsuite/rust/compile/macros/proc/attribute_non_function.rs index 0e88bbe..0e88bbe 100644 --- a/gcc/testsuite/rust/compile/proc_macro_attribute_non_function.rs +++ b/gcc/testsuite/rust/compile/macros/proc/attribute_non_function.rs diff --git a/gcc/testsuite/rust/compile/proc_macro_attribute_non_root_function.rs b/gcc/testsuite/rust/compile/macros/proc/attribute_non_root_function.rs index 709119c..709119c 100644 --- a/gcc/testsuite/rust/compile/proc_macro_attribute_non_root_function.rs +++ b/gcc/testsuite/rust/compile/macros/proc/attribute_non_root_function.rs diff --git a/gcc/testsuite/rust/compile/proc_macro_attribute_non_root_method.rs b/gcc/testsuite/rust/compile/macros/proc/attribute_non_root_method.rs index 30f3196..30f3196 100644 --- a/gcc/testsuite/rust/compile/proc_macro_attribute_non_root_method.rs +++ b/gcc/testsuite/rust/compile/macros/proc/attribute_non_root_method.rs diff --git a/gcc/testsuite/rust/compile/proc_macro_attribute_non_root_module.rs b/gcc/testsuite/rust/compile/macros/proc/attribute_non_root_module.rs index 60165be..60165be 100644 --- a/gcc/testsuite/rust/compile/proc_macro_attribute_non_root_module.rs +++ b/gcc/testsuite/rust/compile/macros/proc/attribute_non_root_module.rs diff --git a/gcc/testsuite/rust/compile/proc_macro_attribute_private.rs b/gcc/testsuite/rust/compile/macros/proc/attribute_private.rs index 00b5ac6..00b5ac6 100644 --- a/gcc/testsuite/rust/compile/proc_macro_attribute_private.rs +++ b/gcc/testsuite/rust/compile/macros/proc/attribute_private.rs diff --git a/gcc/testsuite/rust/compile/proc_macro_crate_type.rs b/gcc/testsuite/rust/compile/macros/proc/crate_type.rs index 880026d..880026d 100644 --- a/gcc/testsuite/rust/compile/proc_macro_crate_type.rs +++ b/gcc/testsuite/rust/compile/macros/proc/crate_type.rs diff --git a/gcc/testsuite/rust/compile/proc_macro_derive_crate_type.rs b/gcc/testsuite/rust/compile/macros/proc/derive_crate_type.rs index 7d4234b..7d4234b 100644 --- a/gcc/testsuite/rust/compile/proc_macro_derive_crate_type.rs +++ b/gcc/testsuite/rust/compile/macros/proc/derive_crate_type.rs diff --git a/gcc/testsuite/rust/compile/proc_macro_derive_malformed.rs b/gcc/testsuite/rust/compile/macros/proc/derive_malformed.rs index d83256b..d83256b 100644 --- a/gcc/testsuite/rust/compile/proc_macro_derive_malformed.rs +++ b/gcc/testsuite/rust/compile/macros/proc/derive_malformed.rs diff --git a/gcc/testsuite/rust/compile/proc_macro_derive_non_function.rs b/gcc/testsuite/rust/compile/macros/proc/derive_non_function.rs index 7cb4c0b..7cb4c0b 100644 --- a/gcc/testsuite/rust/compile/proc_macro_derive_non_function.rs +++ b/gcc/testsuite/rust/compile/macros/proc/derive_non_function.rs diff --git a/gcc/testsuite/rust/compile/proc_macro_derive_non_root_function.rs b/gcc/testsuite/rust/compile/macros/proc/derive_non_root_function.rs index 69d5ca1..69d5ca1 100644 --- a/gcc/testsuite/rust/compile/proc_macro_derive_non_root_function.rs +++ b/gcc/testsuite/rust/compile/macros/proc/derive_non_root_function.rs diff --git a/gcc/testsuite/rust/compile/proc_macro_derive_non_root_module.rs b/gcc/testsuite/rust/compile/macros/proc/derive_non_root_module.rs index 45d7a47..45d7a47 100644 --- a/gcc/testsuite/rust/compile/proc_macro_derive_non_root_module.rs +++ b/gcc/testsuite/rust/compile/macros/proc/derive_non_root_module.rs diff --git a/gcc/testsuite/rust/compile/proc_macro_derive_private.rs b/gcc/testsuite/rust/compile/macros/proc/derive_private.rs index 69922be..69922be 100644 --- a/gcc/testsuite/rust/compile/proc_macro_derive_private.rs +++ b/gcc/testsuite/rust/compile/macros/proc/derive_private.rs diff --git a/gcc/testsuite/rust/compile/proc_macro_non_function.rs b/gcc/testsuite/rust/compile/macros/proc/non_function.rs index ff2083c..ff2083c 100644 --- a/gcc/testsuite/rust/compile/proc_macro_non_function.rs +++ b/gcc/testsuite/rust/compile/macros/proc/non_function.rs diff --git a/gcc/testsuite/rust/compile/proc_macro_non_root_function.rs b/gcc/testsuite/rust/compile/macros/proc/non_root_function.rs index 9309940..9309940 100644 --- a/gcc/testsuite/rust/compile/proc_macro_non_root_function.rs +++ b/gcc/testsuite/rust/compile/macros/proc/non_root_function.rs diff --git a/gcc/testsuite/rust/compile/proc_macro_non_root_method.rs b/gcc/testsuite/rust/compile/macros/proc/non_root_method.rs index ee52c324..ee52c324 100644 --- a/gcc/testsuite/rust/compile/proc_macro_non_root_method.rs +++ b/gcc/testsuite/rust/compile/macros/proc/non_root_method.rs diff --git a/gcc/testsuite/rust/compile/proc_macro_non_root_module.rs b/gcc/testsuite/rust/compile/macros/proc/non_root_module.rs index 1028612..1028612 100644 --- a/gcc/testsuite/rust/compile/proc_macro_non_root_module.rs +++ b/gcc/testsuite/rust/compile/macros/proc/non_root_module.rs diff --git a/gcc/testsuite/rust/compile/proc_macro_derive_non_root_method.rs b/gcc/testsuite/rust/compile/macros/proc/non_root_trait_method.rs index 523b37a..523b37a 100644 --- a/gcc/testsuite/rust/compile/proc_macro_derive_non_root_method.rs +++ b/gcc/testsuite/rust/compile/macros/proc/non_root_trait_method.rs diff --git a/gcc/testsuite/rust/compile/proc_macro_private.rs b/gcc/testsuite/rust/compile/macros/proc/private.rs index 17e85f4..17e85f4 100644 --- a/gcc/testsuite/rust/compile/proc_macro_private.rs +++ b/gcc/testsuite/rust/compile/macros/proc/private.rs diff --git a/gcc/testsuite/rust/compile/macros/proc/proc_macro.exp b/gcc/testsuite/rust/compile/macros/proc/proc_macro.exp new file mode 100644 index 0000000..ac891db --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/proc/proc_macro.exp @@ -0,0 +1,35 @@ +# Copyright (C) 2021-2024 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GCC; see the file COPYING3. If not see +# <http://www.gnu.org/licenses/>. + +# Compile tests, no torture testing. +# +# These tests raise errors in the front end; torture testing doesn't apply. + +# Load support procs. +load_lib rust-dg.exp + +# Initialize `dg'. +dg-init + +# Main loop. +set saved-dg-do-what-default ${dg-do-what-default} + +set dg-do-what-default "compile" +dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.rs]] "" "" +set dg-do-what-default ${saved-dg-do-what-default} + +# All done. +dg-finish diff --git a/gcc/testsuite/rust/compile/proc_macro_pub_function.rs b/gcc/testsuite/rust/compile/macros/proc/pub_function.rs index 52f5d38..52f5d38 100644 --- a/gcc/testsuite/rust/compile/proc_macro_pub_function.rs +++ b/gcc/testsuite/rust/compile/macros/proc/pub_function.rs diff --git a/gcc/testsuite/rust/compile/proc_macro_pub_module.rs b/gcc/testsuite/rust/compile/macros/proc/pub_module.rs index a8bc0e8..a8bc0e8 100644 --- a/gcc/testsuite/rust/compile/proc_macro_pub_module.rs +++ b/gcc/testsuite/rust/compile/macros/proc/pub_module.rs diff --git a/gcc/testsuite/rust/compile/match8.rs b/gcc/testsuite/rust/compile/match8.rs new file mode 100644 index 0000000..336b313 --- /dev/null +++ b/gcc/testsuite/rust/compile/match8.rs @@ -0,0 +1,19 @@ +union MyUnion { + f1: u32, + f2: f32, +} + +fn f(u: MyUnion) -> i32 { + unsafe { + match u { + MyUnion { f1: 10 } => 0, + MyUnion { f2 } => 0, + MyUnion { f1: 10, f2: 10.0 } => 0, // { dg-error "union patterns should have exactly one field" "" } + MyUnion {} => 0, // { dg-error "union patterns should have exactly one field" "" } + MyUnion { f1: () } => 0, // { dg-error "expected u32, found tuple" "" } + _ => 1, + } + } +} + +fn main() {} diff --git a/gcc/testsuite/rust/compile/match9.rs b/gcc/testsuite/rust/compile/match9.rs new file mode 100644 index 0000000..115d458 --- /dev/null +++ b/gcc/testsuite/rust/compile/match9.rs @@ -0,0 +1,30 @@ +enum E { + A(), + B, +} + +const CONST_E: E = E::A(); + +static static_e: E = E::A(); + +type type_alias = E; + +fn f(e: E) { + match e { + E::A => {} + // { dg-error "expected unit struct, unit variant or constant, found tuple variant .E::A." "" { target *-*-* } .-1 } + E::B => {} + crate::CONST_E => {} + crate::type_alias => {} + // { dg-error "expected unit struct, unit variant or constant, found type alias .crate::type_alias." "" { target *-*-* } .-1 } + crate::E => {} + // { dg-error "expected unit struct, unit variant or constant, found enum .crate::E." "" { target *-*-* } .-1 } + crate::static_e => {} + // { dg-error "expected unit struct, unit variant or constant, found static .crate::static_e." "" { target *-*-* } .-1 } + crate::f => {} + // { dg-error "expected unit struct, unit variant or constant, found function .crate::f." "" { target *-*-* } .-1 } + _ => {} + } +} + +fn main() {} diff --git a/gcc/testsuite/rust/compile/nonexistent-field.rs b/gcc/testsuite/rust/compile/nonexistent-field.rs new file mode 100644 index 0000000..e20c49d --- /dev/null +++ b/gcc/testsuite/rust/compile/nonexistent-field.rs @@ -0,0 +1,14 @@ +#![allow(unused)] +fn main() { + struct StructWithFields { + x: u32, + } + + let s = StructWithFields { x: 0 }; + s.foo; + // { dg-error "no field .foo. on type .StructWithFields.StructWithFields .x.u32... .E0609." "" { target *-*-* } .-1 } + + let numbers = (1, 2, 3); + numbers.3; + // { dg-error "no field .3. on type ..<integer>, <integer>, <integer>.. .E0609." "" { target *-*-* } .-1 } +} diff --git a/gcc/testsuite/rust/compile/nr2/compile.exp b/gcc/testsuite/rust/compile/nr2/compile.exp new file mode 100644 index 0000000..0afe36c --- /dev/null +++ b/gcc/testsuite/rust/compile/nr2/compile.exp @@ -0,0 +1,136 @@ +# Copyright (C) 2021-2024 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GCC; see the file COPYING3. If not see +# <http://www.gnu.org/licenses/>. + +# Compile tests, no torture testing, for name resolution 2.0 +# +# These tests raise errors in the front end; torture testing doesn't apply. + +# Load support procs. +load_lib rust-dg.exp + +# Initialize `dg'. +dg-init + +namespace eval rust-nr2-ns { + # Exclude tests which aren't passing yet + # These should be removed from the exclude file over time + + set exclude_fh [open $srcdir/$subdir/exclude r] + set exclude_raw [lsort [split [read $exclude_fh] "\n"]] + close $exclude_fh + unset exclude_fh + + set exclude "" + foreach ent $exclude_raw { + if [regexp {^[^#].*} $ent] { + lappend exclude $ent + } + } + unset exclude_raw + + # Run tests in directories + # Manually specifying these, in case some other test file + # does something weird + set test_dirs {. compile macros/builtin macros/mbe macros/proc} + + set tests_expect_ok "" + set tests_expect_err "" + + foreach test_dir $test_dirs { + foreach test [lsort [glob -nocomplain -tails -directory $srcdir/$subdir/../$test_dir *.rs]] { + if {$test_dir == "."} { + set test_lbl $test + } else { + set test_lbl "$test_dir/$test" + } + set idx [lsearch -exact -sorted $exclude $test_lbl] + if {$idx == -1} { + lappend tests_expect_ok $srcdir/$subdir/../$test_dir/$test + } else { + lappend tests_expect_err $srcdir/$subdir/../$test_dir/$test + set exclude [lreplace $exclude $idx $idx] + } + } + } + + # Generate failures for unmatched tests in the exclude list + foreach ent $exclude { + fail "$ent: could not exclude test" + } + unset exclude + + # run a test while catching record_test calls + set record_test_out "" + proc try_test { test } { + variable record_test_out + rename ::record_test record_test_old + + proc ::record_test { type msg args } { + namespace eval ::rust-nr2-ns { + set type [uplevel 1 {set type}] + set msg [uplevel 1 {set msg}] + variable record_test_out + switch $type { + FAIL { + lappend record_test_out "$type: $msg" + } + XPASS { + lappend record_test_out "$type: $msg" + } + } + } + } + + namespace eval :: { + set saved-dg-do-what-default ${dg-do-what-default} + set dg-do-what-default "compile" + dg-runtest [list [uplevel 1 {set test}]] "-frust-name-resolution-2.0" "" + set dg-do-what-default ${saved-dg-do-what-default} + } + + rename ::record_test "" + rename record_test_old ::record_test + + set record_test_cache $record_test_out + set record_test_out "" + return $record_test_cache + } + + # check for unexpected failures + foreach test $tests_expect_ok { + set fails [try_test $test] + if {[llength $fails] != 0} { + foreach ent $fails { + record_test FAIL "$test: nr2 failure: $ent" + } + } else { + record_test PASS "$test: nr2 success" + } + } + + #check for unexpected successes + foreach test $tests_expect_err { + set fails [try_test $test] + if {[llength $fails] == 0} { + record_test XPASS "$test: nr2 unexpectedly passed" + } else { + record_test XFAIL "$test: nr2 was rightfully excluded" + } + } +} + +# All done. +dg-finish diff --git a/gcc/testsuite/rust/compile/nr2/exclude b/gcc/testsuite/rust/compile/nr2/exclude new file mode 100644 index 0000000..ecef6d2 --- /dev/null +++ b/gcc/testsuite/rust/compile/nr2/exclude @@ -0,0 +1,237 @@ +# relies on exact source file path match +# TODO: patch this file or nr2/compile.exp to handle this +debug-diagnostics-on.rs + +# main list +attr-mismatch-crate-name.rs +attr_deprecated.rs +attr_deprecated_2.rs +auto_trait_super_trait.rs +auto_trait_valid.rs +auto_trait_invalid.rs +bad=file-name.rs +bounds1.rs +break-rust2.rs +break-rust3.rs +macros/builtin/eager1.rs +macros/builtin/eager2.rs +macros/builtin/recurse2.rs +macros/builtin/include3.rs +macros/builtin/include4.rs +canonical_paths1.rs +cfg1.rs +cfg3.rs +cfg4.rs +cfg5.rs +closure_no_type_anno.rs +complex-path1.rs +complex_qualified_path_in_expr.rs +const-issue1440.rs +const_generics_3.rs +const_generics_4.rs +const_generics_5.rs +const_generics_7.rs +derive_empty.rs +derive_macro1.rs +derive_macro3.rs +derive_macro4.rs +derive_macro6.rs +expected_type_args2.rs +expected_type_args3.rs +feature_rust_attri0.rs +feature_rust_attri1.rs +for_lifetimes.rs +format_args_basic_expansion.rs +generic-default1.rs +generics1.rs +generics10.rs +generics11.rs +generics2.rs +generics3.rs +generics4.rs +generics5.rs +generics6.rs +generics7.rs +generics8.rs +generics9.rs +if_let_expr.rs +infer-crate-name.rs +issue-1019.rs +issue-1031.rs +issue-1034.rs +issue-1128.rs +issue-1129-2.rs +issue-1130.rs +issue-1165.rs +issue-1173.rs +issue-1235.rs +issue-1237.rs +issue-1272.rs +issue-1289.rs +issue-1447.rs +issue-1483.rs +issue-1589.rs +issue-1725-1.rs +issue-1725-2.rs +issue-1786.rs +issue-1813.rs +issue-1893.rs +issue-1901.rs +issue-1930.rs +issue-1981.rs +issue-2019-1.rs +issue-2019-2.rs +issue-2019-3.rs +issue-2036.rs +issue-2037.rs +issue-2043.rs +issue-2070.rs +issue-2105.rs +issue-2106.rs +issue-2135.rs +issue-2136-1.rs +issue-2136-2.rs +issue-2139.rs +issue-2142.rs +issue-2165.rs +issue-2166.rs +issue-2190-1.rs +issue-2190-2.rs +issue-2195.rs +issue-2238.rs +issue-2304.rs +issue-2330.rs +issue-2375.rs +issue-2478.rs +issue-2479.rs +issue-2514.rs +issue-2723-1.rs +issue-2723-2.rs +issue-2772-1.rs +issue-2772-2.rs +issue-2775.rs +issue-2747.rs +issue-2782.rs +issue-2812.rs +issue-850.rs +issue-852.rs +issue-855.rs +issue-925.rs +iterators1.rs +lookup_err1.rs +macros/mbe/macro-issue1233.rs +macros/mbe/macro-issue1400.rs +macros/mbe/macro13.rs +macros/mbe/macro15.rs +macros/mbe/macro20.rs +macros/mbe/macro23.rs +macros/mbe/macro40.rs +macros/mbe/macro43.rs +macros/mbe/macro44.rs +macros/mbe/macro50.rs +macros/mbe/macro54.rs +macros/mbe/macro6.rs +macros/mbe/macro_rules_macro_rules.rs +macros/mbe/macro_use1.rs +match-never-ltype.rs +match-never-rtype.rs +match1.rs +match2.rs +match3.rs +match4.rs +match5.rs +match9.rs +method2.rs +multi_reference_type.rs +multiple_bindings1.rs +multiple_bindings2.rs +name_resolution2.rs +name_resolution4.rs +nested_generic.rs +nested_macro_use1.rs +nested_macro_use2.rs +nested_macro_use3.rs +non_member_const.rs +not_find_value_in_scope.rs +parse_associated_type_as_generic_arg.rs +parse_associated_type_as_generic_arg2.rs +parse_associated_type_as_generic_arg3.rs +parse_complex_generic_application.rs +parse_complex_generic_application2.rs +path_as_generic_arg.rs +pattern-struct.rs +privacy1.rs +privacy3.rs +privacy4.rs +privacy5.rs +privacy6.rs +privacy8.rs +macros/proc/attribute_non_function.rs +macros/proc/derive_non_function.rs +macros/proc/non_function.rs +pub_restricted_1.rs +pub_restricted_2.rs +pub_restricted_3.rs +redef_error2.rs +redef_error4.rs +redef_error5.rs +redef_error6.rs +rustc_attr1.rs +self-path1.rs +self-path2.rs +sizeof-stray-infer-var-bug.rs +specify-crate-name.rs +stmt_with_block_dot.rs +struct-expr-parse.rs +trait-cycle.rs +traits1.rs +traits10.rs +traits11.rs +traits12.rs +traits2.rs +traits3.rs +traits4.rs +traits5.rs +traits6.rs +traits7.rs +traits8.rs +traits9.rs +type-bindings1.rs +unconstrained_type_param.rs +undeclared_label.rs +unsafe1.rs +unsafe11.rs +unsafe2.rs +unsafe3.rs +unsafe6.rs +unsafe7.rs +use_1.rs +use_2.rs +v0-mangle1.rs +v0-mangle2.rs +while_break_expr.rs +negative_impls.rs +auto_trait.rs +exhaustiveness1.rs +exhaustiveness2.rs +exhaustiveness3.rs +trait13.rs +trait14.rs +issue-2324-1.rs +issue-2324-2.rs +issue-2725.rs +issue-2987.rs +issue-3045-1.rs +issue-3045-2.rs +issue-3046.rs +unknown-associated-item.rs +issue-3030.rs +issue-3035.rs +issue-3082.rs +issue-3139-1.rs +issue-3139-2.rs +issue-3139-3.rs +issue-3036.rs +issue-2951.rs +issue-2203.rs +issue-2499.rs
\ No newline at end of file diff --git a/gcc/testsuite/rust/compile/prelude_import.rs b/gcc/testsuite/rust/compile/prelude_import.rs new file mode 100644 index 0000000..569fb62 --- /dev/null +++ b/gcc/testsuite/rust/compile/prelude_import.rs @@ -0,0 +1,12 @@ +#![feature(prelude_import)] + +mod core { + mod prelude { + mod v1 { + // hehe + } + } +} + +#[prelude_import] +use core::prelude::v1::*; diff --git a/gcc/testsuite/rust/compile/sizeof-stray-infer-var-bug.rs b/gcc/testsuite/rust/compile/sizeof-stray-infer-var-bug.rs index a5f0c2b..8275691 100644 --- a/gcc/testsuite/rust/compile/sizeof-stray-infer-var-bug.rs +++ b/gcc/testsuite/rust/compile/sizeof-stray-infer-var-bug.rs @@ -1,3 +1,5 @@ +#![feature(intrinsics)] + #[lang = "sized"] pub trait Sized {} diff --git a/gcc/testsuite/rust/compile/torture/intrinsics-8.rs b/gcc/testsuite/rust/compile/torture/intrinsics-8.rs index deb19bd..b9bd83c 100644 --- a/gcc/testsuite/rust/compile/torture/intrinsics-8.rs +++ b/gcc/testsuite/rust/compile/torture/intrinsics-8.rs @@ -1,3 +1,5 @@ +#![feature(intrinsics)] + #[lang = "sized"] pub trait Sized {} diff --git a/gcc/testsuite/rust/compile/torture/transmute-size-check-1.rs b/gcc/testsuite/rust/compile/torture/transmute-size-check-1.rs index 6d34fb1..7b98779 100644 --- a/gcc/testsuite/rust/compile/torture/transmute-size-check-1.rs +++ b/gcc/testsuite/rust/compile/torture/transmute-size-check-1.rs @@ -1,3 +1,5 @@ +#![feature(intrinsics)] + #[lang = "sized"] pub trait Sized {} diff --git a/gcc/testsuite/rust/compile/torture/transmute1.rs b/gcc/testsuite/rust/compile/torture/transmute1.rs index b2a0d07..be9fb1d 100644 --- a/gcc/testsuite/rust/compile/torture/transmute1.rs +++ b/gcc/testsuite/rust/compile/torture/transmute1.rs @@ -1,3 +1,5 @@ +#![feature(intrinsics)] + #[lang = "sized"] pub trait Sized {} diff --git a/gcc/testsuite/rust/compile/torture/uninit-intrinsic-1.rs b/gcc/testsuite/rust/compile/torture/uninit-intrinsic-1.rs index cbb92fe..fa329c6 100644 --- a/gcc/testsuite/rust/compile/torture/uninit-intrinsic-1.rs +++ b/gcc/testsuite/rust/compile/torture/uninit-intrinsic-1.rs @@ -1,3 +1,5 @@ +#![feature(intrinsics)] + #[lang = "sized"] pub trait Sized {} diff --git a/gcc/testsuite/rust/compile/trait13.rs b/gcc/testsuite/rust/compile/trait13.rs new file mode 100644 index 0000000..af5f5a6 --- /dev/null +++ b/gcc/testsuite/rust/compile/trait13.rs @@ -0,0 +1,47 @@ +// Testing multiple supertraits and calling supertrait methods + +struct Foo { + my_int: u32, +} + +trait GrandParent { + fn grandparent(&self) -> u32; +} + +trait Parent : GrandParent { + fn parent(&self) -> bool; +} + +trait Child : Parent { + fn child(&self); +} + +impl GrandParent for Foo { + fn grandparent(&self) -> u32 { + self.my_int + } +} + +impl Parent for Foo { + fn parent(&self) -> bool { + // Call supertrait method + return self.grandparent() != 0; + } +} + +impl Child for Foo { + fn child(&self) { + let _ = self; + } +} + +pub fn main() { + let a = Foo{my_int: 0xfeedf00d}; + let b: &dyn Child = &a; + + b.parent(); + b.child(); + + // Here to silence bogus compiler warning + let _ = a.my_int; +} diff --git a/gcc/testsuite/rust/compile/trait14.rs b/gcc/testsuite/rust/compile/trait14.rs new file mode 100644 index 0000000..c1d42b5 --- /dev/null +++ b/gcc/testsuite/rust/compile/trait14.rs @@ -0,0 +1,51 @@ +// Testing diamond problem with supertraits + + +struct Foo { + my_int: u32, +} + +trait GrandParent { + fn grandparent(&self); +} + +trait Parent1 : GrandParent { + fn parent1(&self); +} + +trait Parent2 : GrandParent { + fn parent2(&self); +} + +trait Child : Parent1+Parent2 { + fn child(&self); +} + +impl GrandParent for Foo { + fn grandparent(&self) { let _ = self; } +} + +impl Parent1 for Foo { + fn parent1(&self) { let _ = self; } +} + +impl Parent2 for Foo { + fn parent2(&self) { let _ = self; } +} + +impl Child for Foo { + fn child(&self) { + let _ = self; + } +} + +pub fn main() { + let a = Foo{my_int: 0xf00dfeed}; + let b: &dyn Child = &a; + + b.parent1(); + b.child(); + + // Suppress bogus compile warning + let _ = a.my_int; +} diff --git a/gcc/testsuite/rust/compile/v0-mangle1.rs b/gcc/testsuite/rust/compile/v0-mangle1.rs index a34f1a7..04c546e 100644 --- a/gcc/testsuite/rust/compile/v0-mangle1.rs +++ b/gcc/testsuite/rust/compile/v0-mangle1.rs @@ -36,7 +36,7 @@ fn main() { // cf. rustc 1.72.0: _RNvNtCshIBIgX6Bzox_10v0_mangle18module_a3bar module_a::bar(); - // { dg-final { scan-assembler "_R.*NvNtNtC10v0_mangle18module_a8module_b3baz" } } + // { dg-final { scan-assembler "_R.*NvNtNtC.*10v0_mangle18module_a8module_b3baz" } } // cf. rustc 1.72.0: _RNvNtNtCshIBIgX6Bzox_10v0_mangle18module_a8module_b3baz module_a::module_b::baz(); diff --git a/gcc/testsuite/rust/compile/name_resolution21.rs b/gcc/testsuite/rust/compile/xfail/name_resolution21.rs index 3d0af2b..df48d00 100644 --- a/gcc/testsuite/rust/compile/name_resolution21.rs +++ b/gcc/testsuite/rust/compile/xfail/name_resolution21.rs @@ -5,7 +5,8 @@ pub mod foo { } use foo::bar; -use foo::bar; // { dg-error ".bar. defined multiple times" } +use foo::bar; +// { dg-error ".bar. defined multiple times" "" { xfail *-*-* } .-1 } fn main() { bar!(); diff --git a/gcc/testsuite/rust/execute/torture/builtin_macro_include_bytes.rs b/gcc/testsuite/rust/execute/torture/builtin_macro_include_bytes.rs index 19a1faf..6aec417 100644 --- a/gcc/testsuite/rust/execute/torture/builtin_macro_include_bytes.rs +++ b/gcc/testsuite/rust/execute/torture/builtin_macro_include_bytes.rs @@ -1,4 +1,5 @@ -// { dg-output "104\r*\n33\r*\n1\r*\n" } +// { dg-output "1\r*\n1\r*\n1\r*\n" } + #![feature(rustc_attrs)] #[rustc_builtin_macro] @@ -6,6 +7,10 @@ macro_rules! include_bytes { () => {{}}; } +macro_rules! my_file { + () => {"include.txt"}; +} + extern "C" { fn printf(s: *const i8, ...); } @@ -17,32 +22,30 @@ fn print_int(value: i32) { } } -fn main() -> i32 { - let bytes = include_bytes!("include.txt"); - - print_int(bytes[0] as i32); - print_int(bytes[14] as i32); - +fn check_bytes(bytes: &[u8; 16]) { let the_bytes = b"hello, include!\n"; - let x = bytes[0] == the_bytes[0] - && bytes[1] == the_bytes[1] - && bytes[2] == the_bytes[2] - && bytes[3] == the_bytes[3] - && bytes[4] == the_bytes[4] - && bytes[5] == the_bytes[5] - && bytes[6] == the_bytes[6] - && bytes[7] == the_bytes[7] - && bytes[8] == the_bytes[8] - && bytes[9] == the_bytes[9] - && bytes[10] == the_bytes[10] - && bytes[11] == the_bytes[11] - && bytes[12] == the_bytes[12] - && bytes[13] == the_bytes[13] - && bytes[14] == the_bytes[14] - && bytes[15] == the_bytes[15]; + let x = true; + let mut i = 0; + + // X is true iff bytes == the_bytes + while i < 16 { + x = x && (bytes[i] == the_bytes[i]); + i += 1; + } print_int(x as i32); +} + +fn main() -> i32 { + let bytes1: &'static [u8; 16] = include_bytes!("include.txt"); + check_bytes(bytes1); + + let bytes2: &'static [u8; 16] = include_bytes!(my_file!()); + check_bytes(bytes2); + + let bytes3 = include_bytes!(my_file!(),); + check_bytes(bytes3); 0 } diff --git a/gcc/testsuite/rust/execute/torture/builtin_macro_include_str.rs b/gcc/testsuite/rust/execute/torture/builtin_macro_include_str.rs index a65639d..b5454db 100644 --- a/gcc/testsuite/rust/execute/torture/builtin_macro_include_str.rs +++ b/gcc/testsuite/rust/execute/torture/builtin_macro_include_str.rs @@ -1,4 +1,4 @@ -// { dg-output "hello, include!\r*\n" } +// { dg-output "hello, include!\r*\nhello, include!\r*\nhello, include!\r*\n" } #![feature(rustc_attrs)] #[rustc_builtin_macro] @@ -6,6 +6,10 @@ macro_rules! include_str { () => {{}}; } +macro_rules! my_file { + () => {"include.txt"}; +} + extern "C" { fn printf(fmt: *const i8, ...); } @@ -22,7 +26,10 @@ fn print(s: &str) { fn main() -> i32 { // include_str! (and include_bytes!) allow for an optional trailing comma. let my_str = include_str!("include.txt",); - + print(my_str); + let my_str = include_str!(my_file!()); + print(my_str); + let my_str = include_str!(my_file!(),); print(my_str); 0 diff --git a/gcc/testsuite/rust/execute/torture/inline_asm_mov_x_5_ARM.rs b/gcc/testsuite/rust/execute/torture/inline_asm_mov_x_5_ARM.rs new file mode 100644 index 0000000..0c867df --- /dev/null +++ b/gcc/testsuite/rust/execute/torture/inline_asm_mov_x_5_ARM.rs @@ -0,0 +1,36 @@ +/* { dg-do run { target arm*-*-* } } */ +/* { dg-output "5\r*\n9\r*\n" }*/ + +#![feature(rustc_attrs)] +#[rustc_builtin_macro] +macro_rules! asm { + () => {}; +} + +extern "C" { + fn printf(s: *const i8, ...); +} + +fn main() -> i32 { + let mut _x: i32 = 0; + let mut _y: i32 = 9; + + unsafe { + asm!( + "mov {}, 5", + out(reg) _x + ); + printf("%d\n\0" as *const str as *const i8, _x); + }; + + unsafe { + asm!( + "mov {}, {}", + in(reg) _y, + out(reg) _x + ); + printf("%d\n\0" as *const str as *const i8, _x); + } + + 0 +} diff --git a/gcc/testsuite/rust/execute/torture/inline_asm_mov_x_5_x86_64.rs b/gcc/testsuite/rust/execute/torture/inline_asm_mov_x_5_x86_64.rs new file mode 100644 index 0000000..5fbbb68 --- /dev/null +++ b/gcc/testsuite/rust/execute/torture/inline_asm_mov_x_5_x86_64.rs @@ -0,0 +1,35 @@ +/* { dg-do run { target x86_64*-*-* } } */ +/* { dg-output "5\r*\n9\r*\n" }*/ + +#![feature(rustc_attrs)] +#[rustc_builtin_macro] +macro_rules! asm { + () => {}; +} + +extern "C" { + fn printf(s: *const i8, ...); +} + +fn main() -> i32 { + let mut x: i32 = 0; + let mut _y: i32 = 9; // Mark it as _y since it is only used as input operand, not printing + + unsafe { + asm!( + "mov $5, {}", + out(reg) x + ); + printf("%d\n\0" as *const str as *const i8, x); + }; + + unsafe { + asm!( + "mov {}, {}", + in(reg) _y, + out(reg) x, + ); + printf("%d\n\0" as *const str as *const i8, x); + } + 0 +} diff --git a/gcc/testsuite/rust/execute/torture/issue-1436.rs b/gcc/testsuite/rust/execute/torture/issue-1436.rs index 4e69961..5d90907 100644 --- a/gcc/testsuite/rust/execute/torture/issue-1436.rs +++ b/gcc/testsuite/rust/execute/torture/issue-1436.rs @@ -1,4 +1,7 @@ // { dg-options "-w" } + +#![feature(intrinsics)] + #[lang = "sized"] pub trait Sized {} diff --git a/gcc/testsuite/rust/execute/torture/issue-2583.rs b/gcc/testsuite/rust/execute/torture/issue-2583.rs index 46f501e..4ff12fc 100644 --- a/gcc/testsuite/rust/execute/torture/issue-2583.rs +++ b/gcc/testsuite/rust/execute/torture/issue-2583.rs @@ -1,3 +1,5 @@ +#![feature(intrinsics)] + #[lang = "sized"] pub trait Sized {} diff --git a/gcc/testsuite/rust/execute/torture/trait14.rs b/gcc/testsuite/rust/execute/torture/trait14.rs new file mode 100644 index 0000000..759950e --- /dev/null +++ b/gcc/testsuite/rust/execute/torture/trait14.rs @@ -0,0 +1,47 @@ +/* { dg-output "parent123\r*\nchild\r*\n" } */ + +extern "C" { + fn printf(s: *const i8, ...); +} + +#[lang = "sized"] +pub trait Sized {} + +struct Foo(i32); +trait Parent { + fn parent(&self); +} + +trait Child : Parent { + fn child(&self); +} + +impl Parent for Foo { + fn parent(&self) { + unsafe { + let parent = "parent%i\n\0"; + let msg = parent as *const str; + printf(msg as *const i8,self.0); + } + } +} + +impl Child for Foo { + fn child(&self) { + let _ = self; + unsafe { + let child = "child\n\0"; + let msg = child as *const str; + printf(msg as *const i8); + } + } +} + +pub fn main() -> i32 { + let a = Foo(123); + let b: &dyn Child = &a; + + b.parent(); + b.child(); + 0 +} diff --git a/gcc/testsuite/rust/execute/torture/trait15.rs b/gcc/testsuite/rust/execute/torture/trait15.rs new file mode 100644 index 0000000..53469d7 --- /dev/null +++ b/gcc/testsuite/rust/execute/torture/trait15.rs @@ -0,0 +1,56 @@ +/* { dg-output "parent123\r*\nchild\r*\n" } */ +// Testing generics passing with supertraits + +extern "C" { + fn printf(s: *const i8, ...); +} + +#[lang = "sized"] +pub trait Sized {} + +struct Foo { + my_int: u32, +} + +trait Parent<T> { + fn parent(&self) -> T; +} + +trait Child<T> : Parent<T> { + fn child(&self); +} + +impl Parent<u32> for Foo { + fn parent(&self) -> u32 { + unsafe { + let parent = "parent%i\n\0"; + let msg = parent as *const str; + printf(msg as *const i8,self.my_int); + return self.my_int; + } + } +} + +impl Child<u32> for Foo { + fn child(&self) { + let _ = self; + unsafe { + let child = "child\n\0"; + let msg = child as *const str; + printf(msg as *const i8); + } + } +} + +pub fn main() -> i32 { + let a = Foo{my_int: 123}; + let b: &dyn Child<u32> = &a; + + b.parent(); + b.child(); + + //Silence bogus warning + let _ = a.my_int; + + 0 +} diff --git a/gcc/testsuite/rust/execute/torture/trait16.rs b/gcc/testsuite/rust/execute/torture/trait16.rs new file mode 100644 index 0000000..95f48a1 --- /dev/null +++ b/gcc/testsuite/rust/execute/torture/trait16.rs @@ -0,0 +1,52 @@ +/* { dg-output "parent123\r*\nchild\r*\n" } */ +//Testing lifetimes with supertraits + +extern "C" { + fn printf(s: *const i8, ...); +} + +struct Foo { + my_int: u32, +} + +trait Parent { + fn parent(&self); +} + +trait Child : Parent { + fn child(&self); +} + +impl Parent for Foo { + fn parent(&self) { + unsafe { + let parent = "parent%i\n\0"; + let msg = parent as *const str; + printf(msg as *const i8,self.my_int); + return; + } + } +} + +impl Child for Foo { + fn child<'a>(&self) { + let _ = self; + unsafe { + let child = "child\n\0"; + let msg = child as *const str; + printf(msg as *const i8); + } + } +} + +pub fn main() -> i32 { + let a = Foo{ my_int: 123}; + let b: &dyn Child = &a; + + b.parent(); + b.child(); + + let _ = a.my_int; + + 0 +} diff --git a/gcc/testsuite/rust/execute/torture/trait17.rs b/gcc/testsuite/rust/execute/torture/trait17.rs new file mode 100644 index 0000000..a619ef8 --- /dev/null +++ b/gcc/testsuite/rust/execute/torture/trait17.rs @@ -0,0 +1,54 @@ +/* { dg-output "parent123\r*\nchild\r*\n" } */ + +//Second test for lifetimes in supertraits + +extern "C" { + fn printf(s: *const i8, ...); +} + +struct Foo { + my_int: u32, +} + +trait Parent { + fn parent(&self); +} + +trait Child : Parent { + fn child(&self); +} + +impl Parent for Foo { + fn parent<'b>(&self) { + unsafe { + let parent = "parent%i\n\0"; + let msg = parent as *const str; + printf(msg as *const i8,self.my_int); + return; + } + } +} + +impl Child for Foo { + fn child(&self) { + let _ = self; + unsafe { + let child = "child\n\0"; + let msg = child as *const str; + printf(msg as *const i8); + } + } +} + +pub fn main() -> i32 { + let a = Foo{ my_int: 123}; + let b: &dyn Child = &a; + + b.parent(); + b.child(); + + // Silence bogus warning + let _ = a.my_int; + + 0 +} diff --git a/gcc/testsuite/rust/execute/torture/trait18.rs b/gcc/testsuite/rust/execute/torture/trait18.rs new file mode 100644 index 0000000..46024d8 --- /dev/null +++ b/gcc/testsuite/rust/execute/torture/trait18.rs @@ -0,0 +1,56 @@ +/* { dg-output "parent\r*\nchild\r*\n" } */ +//Testing default implementations with supertraits. + +extern "C" { + fn printf(s: *const i8, ...); +} + +struct Foo { + my_int: u32, +} + +trait Parent { + fn parent_str(&self) -> &'static str; + fn parent(&self) { + unsafe { + let parent: &'static str = self.parent_str(); + let msg = parent as *const str; + printf(msg as *const i8); + } + } +} + +trait Child : Parent { + fn child(&self); +} + +impl Parent for Foo { + fn parent_str(&self) -> &'static str { + let _ = self; + return "parent\n\0"; + } +} + +impl Child for Foo { + fn child(&self) { + let _ = self; + unsafe { + let child = "child\n\0"; + let msg = child as *const str; + printf(msg as *const i8); + } + } +} + +pub fn main() -> i32 { + let a = Foo{ my_int: 0xfeedf00d}; + let b: &dyn Child = &a; + + b.parent(); + b.child(); + + // Bogus warning silencer + let _ = a.my_int; + + 0 +} diff --git a/gcc/testsuite/rust/rustc/README.md b/gcc/testsuite/rust/rustc/README.md new file mode 100644 index 0000000..ddf4d95 --- /dev/null +++ b/gcc/testsuite/rust/rustc/README.md @@ -0,0 +1,4 @@ +This repository contains test cases from the +[rustc test suite](https://github.com/rust-lang/rust/tree/master/tests). The +conversion of these tests into the DejaGnu format is done by the rustc +testsuite adaptor, a tool specifically designed for this purpose. diff --git a/gcc/testsuite/rust/rustc/rustc.exp b/gcc/testsuite/rust/rustc/rustc.exp new file mode 100644 index 0000000..ac891db --- /dev/null +++ b/gcc/testsuite/rust/rustc/rustc.exp @@ -0,0 +1,35 @@ +# Copyright (C) 2021-2024 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GCC; see the file COPYING3. If not see +# <http://www.gnu.org/licenses/>. + +# Compile tests, no torture testing. +# +# These tests raise errors in the front end; torture testing doesn't apply. + +# Load support procs. +load_lib rust-dg.exp + +# Initialize `dg'. +dg-init + +# Main loop. +set saved-dg-do-what-default ${dg-do-what-default} + +set dg-do-what-default "compile" +dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.rs]] "" "" +set dg-do-what-default ${saved-dg-do-what-default} + +# All done. +dg-finish |