diff --git a/src/test/debug-info/by-value-struct-argument.rs b/src/test/debug-info/by-value-struct-argument.rs new file mode 100644 index 00000000000..052b3c6994a --- /dev/null +++ b/src/test/debug-info/by-value-struct-argument.rs @@ -0,0 +1,37 @@ +// Copyright 2013 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// Does not work yet, see issue #8512 +// xfail-test + +// compile-flags:-Z extra-debug-info +// debugger:break zzz +// debugger:run + +// debugger:finish +// debugger:print s +// check:$1 = {a = 1, b = 2.5} +// debugger:continue + +#[deriving(Clone)] +struct Struct { + a: int, + b: float +} + +fn fun(s: Struct) { + zzz(); +} + +fn main() { + fun(Struct { a: 1, b: 2.5 }); +} + +fn zzz() {()} diff --git a/src/test/debug-info/method-on-enum.rs b/src/test/debug-info/method-on-enum.rs new file mode 100644 index 00000000000..07481011df3 --- /dev/null +++ b/src/test/debug-info/method-on-enum.rs @@ -0,0 +1,141 @@ +// Copyright 2013 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// xfail-win32 Broken because of LLVM bug: http://llvm.org/bugs/show_bug.cgi?id=16249 + +// compile-flags:-Z extra-debug-info +// debugger:break zzz +// debugger:run + +// STACK BY REF +// debugger:finish +// debugger:print *self +// check:$1 = {{Variant2, x = 1799, y = 1799}, {Variant2, 117901063}} +// debugger:print arg1 +// check:$2 = -1 +// debugger:print arg2 +// check:$3 = -2 +// debugger:continue + +// STACK BY VAL +// debugger:finish +// d ebugger:print self -- ignored for now because of issue #8512 +// c heck:$X = {{Variant2, x = 1799, y = 1799}, {Variant2, 117901063}} +// debugger:print arg1 +// check:$4 = -3 +// debugger:print arg2 +// check:$5 = -4 +// debugger:continue + +// OWNED BY REF +// debugger:finish +// debugger:print *self +// check:$6 = {{Variant1, x = 1799, y = 1799}, {Variant1, 117901063}} +// debugger:print arg1 +// check:$7 = -5 +// debugger:print arg2 +// check:$8 = -6 +// debugger:continue + +// OWNED BY VAL +// debugger:finish +// d ebugger:print self -- ignored for now because of issue #8512 +// c heck:$X = {{Variant1, x = 1799, y = 1799}, {Variant1, 117901063}} +// debugger:print arg1 +// check:$9 = -7 +// debugger:print arg2 +// check:$10 = -8 +// debugger:continue + +// OWNED MOVED +// debugger:finish +// debugger:print *self +// check:$11 = {{Variant1, x = 1799, y = 1799}, {Variant1, 117901063}} +// debugger:print arg1 +// check:$12 = -9 +// debugger:print arg2 +// check:$13 = -10 +// debugger:continue + +// MANAGED BY REF +// debugger:finish +// debugger:print *self +// check:$14 = {{Variant2, x = 1799, y = 1799}, {Variant2, 117901063}} +// debugger:print arg1 +// check:$15 = -11 +// debugger:print arg2 +// check:$16 = -12 +// debugger:continue + +// MANAGED BY VAL +// debugger:finish +// d ebugger:print self -- ignored for now because of issue #8512 +// c heck:$X = {{Variant2, x = 1799, y = 1799}, {Variant2, 117901063}} +// debugger:print arg1 +// check:$17 = -13 +// debugger:print arg2 +// check:$18 = -14 +// debugger:continue + +// MANAGED SELF +// debugger:finish +// debugger:print self->val +// check:$19 = {{Variant2, x = 1799, y = 1799}, {Variant2, 117901063}} +// debugger:print arg1 +// check:$20 = -15 +// debugger:print arg2 +// check:$21 = -16 +// debugger:continue + +enum Enum { + Variant1 { x: u16, y: u16 }, + Variant2 (u32) +} + +impl Enum { + + fn self_by_ref(&self, arg1: int, arg2: int) -> int { + zzz(); + arg1 + arg2 + } + + fn self_by_val(self, arg1: int, arg2: int) -> int { + zzz(); + arg1 + arg2 + } + + fn self_owned(~self, arg1: int, arg2: int) -> int { + zzz(); + arg1 + arg2 + } + + fn self_managed(@self, arg1: int, arg2: int) -> int { + zzz(); + arg1 + arg2 + } +} + +fn main() { + let stack = Variant2(117901063); + let _ = stack.self_by_ref(-1, -2); + let _ = stack.self_by_val(-3, -4); + + let owned = ~Variant1{ x: 1799, y: 1799 }; + let _ = owned.self_by_ref(-5, -6); + let _ = owned.self_by_val(-7, -8); + let _ = owned.self_owned(-9, -10); + + let managed = @Variant2(117901063); + let _ = managed.self_by_ref(-11, -12); + let _ = managed.self_by_val(-13, -14); + let _ = managed.self_managed(-15, -16); +} + +fn zzz() {()} diff --git a/src/test/debug-info/method-on-struct.rs b/src/test/debug-info/method-on-struct.rs new file mode 100644 index 00000000000..211f83e6107 --- /dev/null +++ b/src/test/debug-info/method-on-struct.rs @@ -0,0 +1,140 @@ +// Copyright 2013 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// xfail-win32 Broken because of LLVM bug: http://llvm.org/bugs/show_bug.cgi?id=16249 + +// compile-flags:-Z extra-debug-info +// debugger:break zzz +// debugger:run + +// STACK BY REF +// debugger:finish +// debugger:print *self +// check:$1 = {x = 100} +// debugger:print arg1 +// check:$2 = -1 +// debugger:print arg2 +// check:$3 = -2 +// debugger:continue + +// STACK BY VAL +// debugger:finish +// d ebugger:print self -- ignored for now because of issue #8512 +// c heck:$X = {x = 100} +// debugger:print arg1 +// check:$4 = -3 +// debugger:print arg2 +// check:$5 = -4 +// debugger:continue + +// OWNED BY REF +// debugger:finish +// debugger:print *self +// check:$6 = {x = 200} +// debugger:print arg1 +// check:$7 = -5 +// debugger:print arg2 +// check:$8 = -6 +// debugger:continue + +// OWNED BY VAL +// debugger:finish +// d ebugger:print self -- ignored for now because of issue #8512 +// c heck:$X = {x = 200} +// debugger:print arg1 +// check:$9 = -7 +// debugger:print arg2 +// check:$10 = -8 +// debugger:continue + +// OWNED MOVED +// debugger:finish +// debugger:print *self +// check:$11 = {x = 200} +// debugger:print arg1 +// check:$12 = -9 +// debugger:print arg2 +// check:$13 = -10 +// debugger:continue + +// MANAGED BY REF +// debugger:finish +// debugger:print *self +// check:$14 = {x = 300} +// debugger:print arg1 +// check:$15 = -11 +// debugger:print arg2 +// check:$16 = -12 +// debugger:continue + +// MANAGED BY VAL +// debugger:finish +// d ebugger:print self -- ignored for now because of issue #8512 +// c heck:$X = {x = 300} +// debugger:print arg1 +// check:$17 = -13 +// debugger:print arg2 +// check:$18 = -14 +// debugger:continue + +// MANAGED SELF +// debugger:finish +// debugger:print self->val +// check:$19 = {x = 300} +// debugger:print arg1 +// check:$20 = -15 +// debugger:print arg2 +// check:$21 = -16 +// debugger:continue + +struct Struct { + x: int +} + +impl Struct { + + fn self_by_ref(&self, arg1: int, arg2: int) -> int { + zzz(); + self.x + arg1 + arg2 + } + + fn self_by_val(self, arg1: int, arg2: int) -> int { + zzz(); + self.x + arg1 + arg2 + } + + fn self_owned(~self, arg1: int, arg2: int) -> int { + zzz(); + self.x + arg1 + arg2 + } + + fn self_managed(@self, arg1: int, arg2: int) -> int { + zzz(); + self.x + arg1 + arg2 + } +} + +fn main() { + let stack = Struct { x: 100 }; + let _ = stack.self_by_ref(-1, -2); + let _ = stack.self_by_val(-3, -4); + + let owned = ~Struct { x: 200 }; + let _ = owned.self_by_ref(-5, -6); + let _ = owned.self_by_val(-7, -8); + let _ = owned.self_owned(-9, -10); + + let managed = @Struct { x: 300 }; + let _ = managed.self_by_ref(-11, -12); + let _ = managed.self_by_val(-13, -14); + let _ = managed.self_managed(-15, -16); +} + +fn zzz() {()} diff --git a/src/test/debug-info/method-on-trait.rs b/src/test/debug-info/method-on-trait.rs new file mode 100644 index 00000000000..ad6c9a1cada --- /dev/null +++ b/src/test/debug-info/method-on-trait.rs @@ -0,0 +1,147 @@ +// Copyright 2013 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// xfail-win32 Broken because of LLVM bug: http://llvm.org/bugs/show_bug.cgi?id=16249 + +// compile-flags:-Z extra-debug-info +// debugger:break zzz +// debugger:run + +// STACK BY REF +// debugger:finish +// debugger:print *self +// check:$1 = {x = 100} +// debugger:print arg1 +// check:$2 = -1 +// debugger:print arg2 +// check:$3 = -2 +// debugger:continue + +// STACK BY VAL +// debugger:finish +// d ebugger:print self -- ignored for now because of issue #8512 +// c heck:$X = {x = 100} +// debugger:print arg1 +// check:$4 = -3 +// debugger:print arg2 +// check:$5 = -4 +// debugger:continue + +// OWNED BY REF +// debugger:finish +// debugger:print *self +// check:$6 = {x = 200} +// debugger:print arg1 +// check:$7 = -5 +// debugger:print arg2 +// check:$8 = -6 +// debugger:continue + +// OWNED BY VAL +// debugger:finish +// d ebugger:print self -- ignored for now because of issue #8512 +// c heck:$X = {x = 200} +// debugger:print arg1 +// check:$9 = -7 +// debugger:print arg2 +// check:$10 = -8 +// debugger:continue + +// OWNED MOVED +// debugger:finish +// debugger:print *self +// check:$11 = {x = 200} +// debugger:print arg1 +// check:$12 = -9 +// debugger:print arg2 +// check:$13 = -10 +// debugger:continue + +// MANAGED BY REF +// debugger:finish +// debugger:print *self +// check:$14 = {x = 300} +// debugger:print arg1 +// check:$15 = -11 +// debugger:print arg2 +// check:$16 = -12 +// debugger:continue + +// MANAGED BY VAL +// debugger:finish +// d ebugger:print self -- ignored for now because of issue #8512 +// c heck:$X = {x = 300} +// debugger:print arg1 +// check:$17 = -13 +// debugger:print arg2 +// check:$18 = -14 +// debugger:continue + +// MANAGED SELF +// debugger:finish +// debugger:print self->val +// check:$19 = {x = 300} +// debugger:print arg1 +// check:$20 = -15 +// debugger:print arg2 +// check:$21 = -16 +// debugger:continue + +struct Struct { + x: int +} + +trait Trait { + fn self_by_ref(&self, arg1: int, arg2: int) -> int; + fn self_by_val(self, arg1: int, arg2: int) -> int; + fn self_owned(~self, arg1: int, arg2: int) -> int; + fn self_managed(@self, arg1: int, arg2: int) -> int; +} + +impl Trait for Struct { + + fn self_by_ref(&self, arg1: int, arg2: int) -> int { + zzz(); + self.x + arg1 + arg2 + } + + fn self_by_val(self, arg1: int, arg2: int) -> int { + zzz(); + self.x + arg1 + arg2 + } + + fn self_owned(~self, arg1: int, arg2: int) -> int { + zzz(); + self.x + arg1 + arg2 + } + + fn self_managed(@self, arg1: int, arg2: int) -> int { + zzz(); + self.x + arg1 + arg2 + } +} + +fn main() { + let stack = Struct { x: 100 }; + let _ = stack.self_by_ref(-1, -2); + let _ = stack.self_by_val(-3, -4); + + let owned = ~Struct { x: 200 }; + let _ = owned.self_by_ref(-5, -6); + let _ = owned.self_by_val(-7, -8); + let _ = owned.self_owned(-9, -10); + + let managed = @Struct { x: 300 }; + let _ = managed.self_by_ref(-11, -12); + let _ = managed.self_by_val(-13, -14); + let _ = managed.self_managed(-15, -16); +} + +fn zzz() {()} diff --git a/src/test/debug-info/method-on-tuple-struct.rs b/src/test/debug-info/method-on-tuple-struct.rs new file mode 100644 index 00000000000..03d7c44059f --- /dev/null +++ b/src/test/debug-info/method-on-tuple-struct.rs @@ -0,0 +1,138 @@ +// Copyright 2013 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// xfail-win32 Broken because of LLVM bug: http://llvm.org/bugs/show_bug.cgi?id=16249 + +// compile-flags:-Z extra-debug-info +// debugger:break zzz +// debugger:run + +// STACK BY REF +// debugger:finish +// debugger:print *self +// check:$1 = {100, -100.5} +// debugger:print arg1 +// check:$2 = -1 +// debugger:print arg2 +// check:$3 = -2 +// debugger:continue + +// STACK BY VAL +// debugger:finish +// d ebugger:print self -- ignored for now because of issue #8512 +// c heck:$X = {100, -100.5} +// debugger:print arg1 +// check:$4 = -3 +// debugger:print arg2 +// check:$5 = -4 +// debugger:continue + +// OWNED BY REF +// debugger:finish +// debugger:print *self +// check:$6 = {200, -200.5} +// debugger:print arg1 +// check:$7 = -5 +// debugger:print arg2 +// check:$8 = -6 +// debugger:continue + +// OWNED BY VAL +// debugger:finish +// d ebugger:print self -- ignored for now because of issue #8512 +// c heck:$X = {200, -200.5} +// debugger:print arg1 +// check:$9 = -7 +// debugger:print arg2 +// check:$10 = -8 +// debugger:continue + +// OWNED MOVED +// debugger:finish +// debugger:print *self +// check:$11 = {200, -200.5} +// debugger:print arg1 +// check:$12 = -9 +// debugger:print arg2 +// check:$13 = -10 +// debugger:continue + +// MANAGED BY REF +// debugger:finish +// debugger:print *self +// check:$14 = {300, -300.5} +// debugger:print arg1 +// check:$15 = -11 +// debugger:print arg2 +// check:$16 = -12 +// debugger:continue + +// MANAGED BY VAL +// debugger:finish +// d ebugger:print self -- ignored for now because of issue #8512 +// c heck:$X = {300, -300.5} +// debugger:print arg1 +// check:$17 = -13 +// debugger:print arg2 +// check:$18 = -14 +// debugger:continue + +// MANAGED SELF +// debugger:finish +// debugger:print self->val +// check:$19 = {300, -300.5} +// debugger:print arg1 +// check:$20 = -15 +// debugger:print arg2 +// check:$21 = -16 +// debugger:continue + +struct TupleStruct(int, float); + +impl TupleStruct { + + fn self_by_ref(&self, arg1: int, arg2: int) -> int { + zzz(); + arg1 + arg2 + } + + fn self_by_val(self, arg1: int, arg2: int) -> int { + zzz(); + arg1 + arg2 + } + + fn self_owned(~self, arg1: int, arg2: int) -> int { + zzz(); + arg1 + arg2 + } + + fn self_managed(@self, arg1: int, arg2: int) -> int { + zzz(); + arg1 + arg2 + } +} + +fn main() { + let stack = TupleStruct(100, -100.5); + let _ = stack.self_by_ref(-1, -2); + let _ = stack.self_by_val(-3, -4); + + let owned = ~TupleStruct(200, -200.5); + let _ = owned.self_by_ref(-5, -6); + let _ = owned.self_by_val(-7, -8); + let _ = owned.self_owned(-9, -10); + + let managed = @TupleStruct(300, -300.5); + let _ = managed.self_by_ref(-11, -12); + let _ = managed.self_by_val(-13, -14); + let _ = managed.self_managed(-15, -16); +} + +fn zzz() {()} diff --git a/src/test/debug-info/tuple-struct.rs b/src/test/debug-info/tuple-struct.rs new file mode 100644 index 00000000000..ada3802e15d --- /dev/null +++ b/src/test/debug-info/tuple-struct.rs @@ -0,0 +1,60 @@ +// Copyright 2013 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// xfail-win32 Broken because of LLVM bug: http://llvm.org/bugs/show_bug.cgi?id=16249 + +// compile-flags:-Z extra-debug-info +// debugger:set print pretty off +// debugger:break zzz +// debugger:run +// debugger:finish + +// debugger:print no_padding16 +// check:$1 = {10000, -10001} + +// debugger:print no_padding32 +// check:$2 = {-10002, -10003.5, 10004} + +// debugger:print no_padding64 +// check:$3 = {-10005.5, 10006, 10007} + +// debugger:print no_padding163264 +// check:$4 = {-10008, 10009, 10010, 10011} + +// debugger:print internal_padding +// check:$5 = {10012, -10013} + +// debugger:print padding_at_end +// check:$6 = {-10014, 10015} + + +// This test case mainly makes sure that no field names are generated for tuple structs (as opposed +// to all fields having the name "__field__"). Otherwise they are handled the same a normal structs. + +struct NoPadding16(u16, i16); +struct NoPadding32(i32, f32, u32); +struct NoPadding64(f64, i64, u64); +struct NoPadding163264(i16, u16, i32, u64); +struct InternalPadding(u16, i64); +struct PaddingAtEnd(i64, u16); + +fn main() { + let no_padding16 = NoPadding16(10000, -10001); + let no_padding32 = NoPadding32(-10002, -10003.5, 10004); + let no_padding64 = NoPadding64(-10005.5, 10006, 10007); + let no_padding163264 = NoPadding163264(-10008, 10009, 10010, 10011); + + let internal_padding = InternalPadding(10012, -10013); + let padding_at_end = PaddingAtEnd(-10014, 10015); + + zzz(); +} + +fn zzz() {()}