]> git.lizzy.rs Git - rust.git/commitdiff
debuginfo: Add some tests for visibiliy scopes within closures.
authorMichael Woerister <michaelwoerister@gmail>
Tue, 6 Aug 2013 22:14:08 +0000 (00:14 +0200)
committerMichael Woerister <michaelwoerister@gmail>
Tue, 13 Aug 2013 09:13:49 +0000 (11:13 +0200)
src/librustc/middle/trans/debuginfo.rs
src/test/debug-info/lexical-scope-in-managed-closure.rs [new file with mode: 0644]
src/test/debug-info/lexical-scope-in-stack-closure.rs [new file with mode: 0644]
src/test/debug-info/lexical-scope-in-unique-closure.rs [new file with mode: 0644]

index 5591f7debf8e613fd52ced546759caa6966a98f2..66ff2495c296de6dfcd05328a9732c5df722d73c 100644 (file)
@@ -128,7 +128,7 @@ pub struct FunctionDebugContext {
 }
 
 impl FunctionDebugContext {
-    priv fn new() -> FunctionDebugContext {
+    fn new() -> FunctionDebugContext {
         return FunctionDebugContext {
             scope_map: HashMap::new(),
             argument_counter: 1,
@@ -449,7 +449,7 @@ fn declare_local(bcx: @mut Block,
     let type_metadata = type_metadata(cx, variable_type, span);
     let scope = scope_metadata(bcx.fcx, node_id, span);
 
-    let var_metadata = do name.as_c_str |name| {
+    let var_metadata = do name.to_c_str().with_ref |name| {
         unsafe {
             llvm::LLVMDIBuilderCreateLocalVariable(
                 DIB(cx),
diff --git a/src/test/debug-info/lexical-scope-in-managed-closure.rs b/src/test/debug-info/lexical-scope-in-managed-closure.rs
new file mode 100644 (file)
index 0000000..d04818b
--- /dev/null
@@ -0,0 +1,79 @@
+// 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 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, 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
+
+// debugger:finish
+// debugger:print x
+// check:$1 = false
+// debugger:continue
+
+// debugger:finish
+// debugger:print x
+// check:$2 = false
+// debugger:continue
+
+// debugger:finish
+// debugger:print x
+// check:$3 = 1000
+// debugger:continue
+
+// debugger:finish
+// debugger:print x
+// check:$4 = 2.5
+// debugger:continue
+
+// debugger:finish
+// debugger:print x
+// check:$5 = true
+// debugger:continue
+
+// debugger:finish
+// debugger:print x
+// check:$6 = false
+// debugger:continue
+
+fn main() {
+
+    let x = false;
+
+    zzz();
+    sentinel();
+
+    let managed_closure: @fn(int) = |x| {
+        zzz();
+        sentinel();
+
+        let x = 2.5;
+
+        zzz();
+        sentinel();
+
+        let x = true;
+
+        zzz();
+        sentinel();
+    };
+
+    zzz();
+    sentinel();
+
+    managed_closure(1000);
+
+    zzz();
+    sentinel();
+}
+
+fn zzz() {()}
+fn sentinel() {()}
diff --git a/src/test/debug-info/lexical-scope-in-stack-closure.rs b/src/test/debug-info/lexical-scope-in-stack-closure.rs
new file mode 100644 (file)
index 0000000..dd86b4a
--- /dev/null
@@ -0,0 +1,79 @@
+// 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 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, 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
+
+// debugger:finish
+// debugger:print x
+// check:$1 = false
+// debugger:continue
+
+// debugger:finish
+// debugger:print x
+// check:$2 = false
+// debugger:continue
+
+// debugger:finish
+// debugger:print x
+// check:$3 = 1000
+// debugger:continue
+
+// debugger:finish
+// debugger:print x
+// check:$4 = 2.5
+// debugger:continue
+
+// debugger:finish
+// debugger:print x
+// check:$5 = true
+// debugger:continue
+
+// debugger:finish
+// debugger:print x
+// check:$6 = false
+// debugger:continue
+
+fn main() {
+
+    let x = false;
+
+    zzz();
+    sentinel();
+
+    let stack_closure: &fn(int) = |x| {
+        zzz();
+        sentinel();
+
+        let x = 2.5;
+
+        zzz();
+        sentinel();
+
+        let x = true;
+
+        zzz();
+        sentinel();
+    };
+
+    zzz();
+    sentinel();
+
+    stack_closure(1000);
+
+    zzz();
+    sentinel();
+}
+
+fn zzz() {()}
+fn sentinel() {()}
diff --git a/src/test/debug-info/lexical-scope-in-unique-closure.rs b/src/test/debug-info/lexical-scope-in-unique-closure.rs
new file mode 100644 (file)
index 0000000..32251f4
--- /dev/null
@@ -0,0 +1,79 @@
+// 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 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, 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
+
+// debugger:finish
+// debugger:print x
+// check:$1 = false
+// debugger:continue
+
+// debugger:finish
+// debugger:print x
+// check:$2 = false
+// debugger:continue
+
+// debugger:finish
+// debugger:print x
+// check:$3 = 1000
+// debugger:continue
+
+// debugger:finish
+// debugger:print x
+// check:$4 = 2.5
+// debugger:continue
+
+// debugger:finish
+// debugger:print x
+// check:$5 = true
+// debugger:continue
+
+// debugger:finish
+// debugger:print x
+// check:$6 = false
+// debugger:continue
+
+fn main() {
+
+    let x = false;
+
+    zzz();
+    sentinel();
+
+    let unique_closure: ~fn(int) = |x| {
+        zzz();
+        sentinel();
+
+        let x = 2.5;
+
+        zzz();
+        sentinel();
+
+        let x = true;
+
+        zzz();
+        sentinel();
+    };
+
+    zzz();
+    sentinel();
+
+    unique_closure(1000);
+
+    zzz();
+    sentinel();
+}
+
+fn zzz() {()}
+fn sentinel() {()}