// 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. // compile-flags:-Z extra-debug-info // debugger:break zzz // debugger:run // debugger:finish // debugger:print variable // check:$1 = 1 // debugger:print constant // check:$2 = 2 // debugger:print a_struct // check:$3 = {a = -3, b = 4.5, c = 5} // debugger:print *struct_ref // check:$4 = {a = -3, b = 4.5, c = 5} // debugger:print *owned // check:$5 = 6 // debugger:print managed->val // check:$6 = 7 // debugger:print closure_local // check:$7 = 8 // debugger:continue #[allow(unused_variable)]; struct Struct { a: int, b: float, c: uint } fn main() { let mut variable = 1; let constant = 2; let a_struct = Struct { a: -3, b: 4.5, c: 5 }; let struct_ref = &a_struct; let owned = ~6; let managed = @7; let closure = || { let closure_local = 8; let nested_closure = || { zzz(); variable = constant + a_struct.a + struct_ref.a + *owned + *managed + closure_local; }; // breaking here will yield a wrong value for 'constant'. In particular, GDB will // read the value of the register that supposedly contains the pointer to 'constant' // and try derefence it. The register, however, already contains the actual value, and // not a pointer to it. -mw // zzz(); nested_closure(); }; closure(); } fn zzz() {()}