diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 7819e39b97..cc17eba770 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2020-04-01 Tom Tromey + + * gdb.rust/union.rs: New file. + * gdb.rust/union.exp: New file. + * gdb.rust/simple.rs (Union, Union2): Move to union.rs. + (main): Update. + * gdb.rust/simple.exp: Move union tests to union.exp. + 2020-04-01 Tom Tromey * gdb.rust/simple.rs (main): Remove "y0". diff --git a/gdb/testsuite/gdb.rust/simple.exp b/gdb/testsuite/gdb.rust/simple.exp index b4fcf27426..92b3666386 100644 --- a/gdb/testsuite/gdb.rust/simple.exp +++ b/gdb/testsuite/gdb.rust/simple.exp @@ -335,17 +335,6 @@ gdb_test "print parametrized.next.val" \ gdb_test "print parametrized" \ " = simple::ParametrizedStruct \\{next: simple::ParametrizedEnum<\[a-z:\]*Box>>::Val\\{val: $hex\\}, value: 0\\}" -gdb_test "print u" " = simple::Union {f1: -1, f2: 255}" - -gdb_test_sequence "ptype/o Union" "" { - "/\\* offset | size \\*/ type = union simple::Union {" - "/\\* 1 \\*/ f1: i8," - "/\\* 1 \\*/ f2: u8," - "" - " /\\* total size \\(bytes\\): 1 \\*/" - " }" -} - gdb_test_sequence "ptype/o SimpleLayout" "" { "/\\* offset | size \\*/ type = struct simple::SimpleLayout {" "/\\* 0 | 2 \\*/ f1: u16," @@ -355,8 +344,6 @@ gdb_test_sequence "ptype/o SimpleLayout" "" { " }" } -gdb_test "print u2" " = simple::Union2 {name: \\\[1\\\]}" - gdb_test "print nonzero_offset" " = simple::EnumWithNonzeroOffset {a: core::option::Option::Some\\(1\\), b: core::option::Option::None}" # PR rust/23626 - this used to crash. Note that the results are diff --git a/gdb/testsuite/gdb.rust/simple.rs b/gdb/testsuite/gdb.rust/simple.rs index f44e4affeb..78c3b21745 100644 --- a/gdb/testsuite/gdb.rust/simple.rs +++ b/gdb/testsuite/gdb.rust/simple.rs @@ -80,15 +80,6 @@ struct ParametrizedStruct { value: T } -union Union { - f1: i8, - f2: u8, -} - -pub union Union2 { - pub name: [u8; 1], -} - struct StringAtOffset { pub field1: &'static str, pub field2: i32, @@ -184,13 +175,10 @@ fn main () { value: 0, }; - let u = Union { f2: 255 }; let simplelayout = SimpleLayout { f1: 8, f2: 9 }; let empty_enum_value: EmptyEnum; - let u2 = Union2 { name: [1] }; - let nonzero_offset = EnumWithNonzeroOffset { a: Some(1), b: None }; println!("{}, {}", x.0, x.1); // set breakpoint here diff --git a/gdb/testsuite/gdb.rust/union.exp b/gdb/testsuite/gdb.rust/union.exp new file mode 100644 index 0000000000..c7864a2fc9 --- /dev/null +++ b/gdb/testsuite/gdb.rust/union.exp @@ -0,0 +1,45 @@ +# Copyright (C) 2020 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 this program. If not, see . + +# Test of "union" for Rust. + +load_lib rust-support.exp +if {[skip_rust_tests]} { + continue +} + +standard_testfile .rs +if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug rust}]} { + return -1 +} + +set line [gdb_get_line_number "set breakpoint here"] +if {![runto ${srcfile}:$line]} { + untested "could not run to breakpoint" + return -1 +} + +gdb_test "print u" " = union::Union {f1: -1, f2: 255}" + +gdb_test_sequence "ptype/o Union" "" { + "/\\* offset | size \\*/ type = union union::Union {" + "/\\* 1 \\*/ f1: i8," + "/\\* 1 \\*/ f2: u8," + "" + " /\\* total size \\(bytes\\): 1 \\*/" + " }" +} + +gdb_test "print u2" " = union::Union2 {name: \\\[1\\\]}" diff --git a/gdb/testsuite/gdb.rust/union.rs b/gdb/testsuite/gdb.rust/union.rs new file mode 100644 index 0000000000..ef3069641b --- /dev/null +++ b/gdb/testsuite/gdb.rust/union.rs @@ -0,0 +1,35 @@ +// Copyright (C) 2020 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 this program. If not, see . + +#![allow(dead_code)] +#![allow(unused_variables)] +#![allow(unused_assignments)] + + +union Union { + f1: i8, + f2: u8, +} + +pub union Union2 { + pub name: [u8; 1], +} + +fn main() { + let u = Union { f2: 255 }; + let u2 = Union2 { name: [1] }; + + println!("Hi"); // set breakpoint here +}