aboutsummaryrefslogtreecommitdiff
path: root/gdb/testsuite/gdb.rust/methods.rs
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2016-04-26 19:38:43 -0600
committerTom Tromey <tom@tromey.com>2016-05-17 12:02:01 -0600
commit67218854b1987d89593ccaf5feaf5b29b1b976f2 (patch)
tree8137e1713d27a507dfc57015308f44166543ffc6 /gdb/testsuite/gdb.rust/methods.rs
parentc44af4ebc000f606d16b42224cba2cfe80391d5c (diff)
downloadgdb-67218854b1987d89593ccaf5feaf5b29b1b976f2.zip
gdb-67218854b1987d89593ccaf5feaf5b29b1b976f2.tar.gz
gdb-67218854b1987d89593ccaf5feaf5b29b1b976f2.tar.bz2
Update gdb test suite for Rust
This updates the gdb test suite for Rust. 2016-05-17 Tom Tromey <tom@tromey.com> Manish Goregaokar <manishsmail@gmail.com> * lib/rust-support.exp: New file. * lib/gdb.exp (skip_rust_tests): New proc. (build_executable_from_specs): Handle rust. * lib/future.exp (gdb_find_rustc): New proc. (gdb_default_target_compile): Handle rust. * gdb.rust/expr.exp: New file. * gdb.rust/generics.exp: New file. * gdb.rust/generics.rs: New file. * gdb.rust/methods.exp: New file. * gdb.rust/methods.rs: New file. * gdb.rust/modules.exp: New file. * gdb.rust/modules.rs: New file. * gdb.rust/simple.exp: New file. * gdb.rust/simple.rs: New file.
Diffstat (limited to 'gdb/testsuite/gdb.rust/methods.rs')
-rw-r--r--gdb/testsuite/gdb.rust/methods.rs129
1 files changed, 129 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.rust/methods.rs b/gdb/testsuite/gdb.rust/methods.rs
new file mode 100644
index 0000000..d372214
--- /dev/null
+++ b/gdb/testsuite/gdb.rust/methods.rs
@@ -0,0 +1,129 @@
+// Copyright (C) 2016 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 <http://www.gnu.org/licenses/>.
+
+#![allow(dead_code)]
+#![allow(unused_variables)]
+#![allow(unused_assignments)]
+
+
+pub trait Whatever {
+ fn whatever(&self) -> i32;
+ fn static_i32(x: i32) -> Self;
+}
+
+impl Whatever for i32 {
+ fn whatever(&self) -> i32 {
+ *self // set breakpoint 2 here
+ }
+
+ fn static_i32(x: i32) -> i32 {
+ x
+ }
+}
+
+pub struct HasMethods {
+ value: i32
+}
+
+impl HasMethods {
+ pub fn new() -> HasMethods {
+ HasMethods { value: 0 }
+ }
+
+ pub fn incr(&mut self) -> &mut HasMethods {
+ self.value += 1;
+ self
+ }
+
+ pub fn take(self) -> HasMethods {
+ self
+ }
+}
+
+impl Whatever for HasMethods {
+ fn whatever(&self) -> i32 {
+ self.value
+ }
+
+ fn static_i32(x: i32) -> HasMethods {
+ HasMethods{value: x}
+ }
+}
+
+enum SomeEnum {
+ One,
+ Two,
+ Three(i32),
+ Four{x: i32}
+}
+
+impl SomeEnum {
+ fn value(&self) -> i32 {
+ match *self {
+ SomeEnum::Three(x) => x,
+ SomeEnum::Four{x} => x,
+ _ => 0
+ }
+ }
+
+ fn mut_value(&mut self) -> i32 {
+ match *self {
+ SomeEnum::Three(x) => x,
+ SomeEnum::Four{x} => x,
+ _ => 0
+ }
+ }
+
+ fn take_value(self) -> (i32, SomeEnum) {
+ (match self {
+ SomeEnum::Three(x) => x,
+ SomeEnum::Four{x} => x,
+ _ => 0
+ }, self)
+ }
+}
+
+enum SimpleEnum {
+ One,
+ Two,
+ Three
+}
+
+impl SimpleEnum {
+ fn value(&self) -> i32 {
+ match *self {
+ SimpleEnum::One => 1,
+ SimpleEnum::Two => 2,
+ SimpleEnum::Three => 452,
+ }
+ }
+}
+
+fn main() {
+ let mut a = SomeEnum::Three(23);
+ let av = a.value();
+ let amv = (&mut a).mut_value();
+ let atv = a.take_value();
+ let b = SomeEnum::Four{x: 24};
+ let bv = b.value();
+ let c = SimpleEnum::Three;
+ let d = c.value();
+ let mut x = HasMethods::new();
+ x.incr(); // set breakpoint 1 here
+ (&mut x).incr();
+ let y = 23i32.whatever();
+ println!("{}", y);
+ let z = x.take();
+}