about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMichael Woerister <michaelwoerister@gmail>2013-09-06 16:00:08 +0200
committerMichael Woerister <michaelwoerister@gmail>2013-09-10 16:25:19 +0200
commit93d6328d49e07f8c0ad98f5925c575d9c1b1cc9b (patch)
treed22884589d9b884e432e5c78c50b265908222bab
parent382cb500be6c9927805bd9cd7af6a0558333dd0f (diff)
downloadrust-93d6328d49e07f8c0ad98f5925c575d9c1b1cc9b.tar.gz
rust-93d6328d49e07f8c0ad98f5925c575d9c1b1cc9b.zip
debuginfo: Support for namespaces (functions only)
-rw-r--r--src/librustc/middle/trans/base.rs4
-rw-r--r--src/librustc/middle/trans/debuginfo.rs260
-rw-r--r--src/test/debug-info/basic-types.rs2
-rw-r--r--src/test/debug-info/borrowed-basic.rs2
-rw-r--r--src/test/debug-info/borrowed-c-style-enum.rs2
-rw-r--r--src/test/debug-info/borrowed-enum.rs2
-rw-r--r--src/test/debug-info/borrowed-managed-basic.rs2
-rw-r--r--src/test/debug-info/borrowed-struct.rs2
-rw-r--r--src/test/debug-info/borrowed-tuple.rs2
-rw-r--r--src/test/debug-info/borrowed-unique-basic.rs2
-rw-r--r--src/test/debug-info/box.rs2
-rw-r--r--src/test/debug-info/boxed-struct.rs2
-rw-r--r--src/test/debug-info/boxed-vec.rs2
-rw-r--r--src/test/debug-info/by-value-non-immediate-argument.rs2
-rw-r--r--src/test/debug-info/by-value-self-argument-in-trait-impl.rs2
-rw-r--r--src/test/debug-info/c-style-enum-in-composite.rs2
-rw-r--r--src/test/debug-info/c-style-enum.rs2
-rw-r--r--src/test/debug-info/closure-in-generic-function.rs2
-rw-r--r--src/test/debug-info/destructured-fn-argument.rs2
-rw-r--r--src/test/debug-info/destructured-local.rs2
-rw-r--r--src/test/debug-info/evec-in-struct.rs2
-rw-r--r--src/test/debug-info/function-arguments.rs4
-rw-r--r--src/test/debug-info/generic-function.rs2
-rw-r--r--src/test/debug-info/generic-functions-nested.rs2
-rw-r--r--src/test/debug-info/generic-method-on-generic-struct.rs2
-rw-r--r--src/test/debug-info/generic-static-method-on-struct-and-enum.rs2
-rw-r--r--src/test/debug-info/generic-struct-style-enum.rs2
-rw-r--r--src/test/debug-info/generic-struct.rs2
-rw-r--r--src/test/debug-info/generic-trait-generic-static-default-method.rs2
-rw-r--r--src/test/debug-info/generic-tuple-style-enum.rs2
-rw-r--r--src/test/debug-info/lexical-scope-in-for-loop.rs2
-rw-r--r--src/test/debug-info/lexical-scope-in-if.rs2
-rw-r--r--src/test/debug-info/lexical-scope-in-managed-closure.rs2
-rw-r--r--src/test/debug-info/lexical-scope-in-match.rs2
-rw-r--r--src/test/debug-info/lexical-scope-in-stack-closure.rs2
-rw-r--r--src/test/debug-info/lexical-scope-in-unconditional-loop.rs2
-rw-r--r--src/test/debug-info/lexical-scope-in-unique-closure.rs2
-rw-r--r--src/test/debug-info/lexical-scope-in-while.rs2
-rw-r--r--src/test/debug-info/lexical-scope-with-macro.rs2
-rw-r--r--src/test/debug-info/lexical-scopes-in-block-expression.rs2
-rw-r--r--src/test/debug-info/managed-enum.rs2
-rw-r--r--src/test/debug-info/managed-pointer-within-unique-vec.rs2
-rw-r--r--src/test/debug-info/managed-pointer-within-unique.rs2
-rw-r--r--src/test/debug-info/method-on-enum.rs2
-rw-r--r--src/test/debug-info/method-on-generic-struct.rs2
-rw-r--r--src/test/debug-info/method-on-struct.rs2
-rw-r--r--src/test/debug-info/method-on-trait.rs2
-rw-r--r--src/test/debug-info/method-on-tuple-struct.rs2
-rw-r--r--src/test/debug-info/multiple-functions-equal-var-names.rs2
-rw-r--r--src/test/debug-info/multiple-functions.rs2
-rw-r--r--src/test/debug-info/name-shadowing-and-scope-nesting.rs2
-rw-r--r--src/test/debug-info/nil-enum.rs2
-rw-r--r--src/test/debug-info/option-like-enum.rs2
-rw-r--r--src/test/debug-info/packed-struct-with-destructor.rs2
-rw-r--r--src/test/debug-info/packed-struct.rs2
-rw-r--r--src/test/debug-info/self-in-default-method.rs2
-rw-r--r--src/test/debug-info/self-in-generic-default-method.rs2
-rw-r--r--src/test/debug-info/shadowed-argument.rs2
-rw-r--r--src/test/debug-info/shadowed-variable.rs2
-rw-r--r--src/test/debug-info/simple-lexical-scope.rs2
-rw-r--r--src/test/debug-info/simple-struct.rs2
-rw-r--r--src/test/debug-info/simple-tuple.rs2
-rw-r--r--src/test/debug-info/static-method-on-struct-and-enum.rs2
-rw-r--r--src/test/debug-info/struct-in-enum.rs2
-rw-r--r--src/test/debug-info/struct-in-struct.rs2
-rw-r--r--src/test/debug-info/struct-style-enum.rs2
-rw-r--r--src/test/debug-info/struct-with-destructor.rs2
-rw-r--r--src/test/debug-info/trait-generic-static-default-method.rs2
-rw-r--r--src/test/debug-info/tuple-in-struct.rs2
-rw-r--r--src/test/debug-info/tuple-in-tuple.rs2
-rw-r--r--src/test/debug-info/tuple-struct.rs2
-rw-r--r--src/test/debug-info/tuple-style-enum.rs2
-rw-r--r--src/test/debug-info/unique-enum.rs2
-rw-r--r--src/test/debug-info/var-captured-in-managed-closure.rs2
-rw-r--r--src/test/debug-info/var-captured-in-nested-closure.rs2
-rw-r--r--src/test/debug-info/var-captured-in-sendable-closure.rs2
-rw-r--r--src/test/debug-info/var-captured-in-stack-closure.rs2
-rw-r--r--src/test/debug-info/vec-slices.rs2
-rw-r--r--src/test/debug-info/vec.rs2
79 files changed, 316 insertions, 104 deletions
diff --git a/src/librustc/middle/trans/base.rs b/src/librustc/middle/trans/base.rs
index d964e89ab8e..1caf65e3f3b 100644
--- a/src/librustc/middle/trans/base.rs
+++ b/src/librustc/middle/trans/base.rs
@@ -3021,6 +3021,10 @@ pub fn trans_crate(sess: session::Session,
                                      link_meta,
                                      analysis.reachable);
 
+    if ccx.sess.opts.debuginfo {
+        debuginfo::initialize(ccx, crate);
+    }
+
     {
         let _icx = push_ctxt("text");
         trans_mod(ccx, &crate.module);
diff --git a/src/librustc/middle/trans/debuginfo.rs b/src/librustc/middle/trans/debuginfo.rs
index 70630e3ee49..2c5e77b069a 100644
--- a/src/librustc/middle/trans/debuginfo.rs
+++ b/src/librustc/middle/trans/debuginfo.rs
@@ -68,7 +68,7 @@ use std::libc::{c_uint, c_ulonglong, c_longlong};
 use std::ptr;
 use std::vec;
 use syntax::codemap::Span;
-use syntax::{ast, codemap, ast_util, ast_map, opt_vec};
+use syntax::{ast, codemap, ast_util, ast_map, opt_vec, visit};
 use syntax::parse::token;
 use syntax::parse::token::special_idents;
 
@@ -96,9 +96,11 @@ pub struct CrateDebugContext {
     priv crate_file: ~str,
     priv llcontext: ContextRef,
     priv builder: DIBuilderRef,
-    priv curr_loc: DebugLocation,
+    priv current_debug_location: DebugLocation,
     priv created_files: HashMap<~str, DIFile>,
     priv created_types: HashMap<uint, DIType>,
+    priv namespace_map: HashMap<ast::NodeId, @NamespaceTree>,
+    priv function_companion_namespaces: HashMap<ast::NodeId, @NamespaceTree>,
 }
 
 impl CrateDebugContext {
@@ -111,9 +113,11 @@ impl CrateDebugContext {
             crate_file: crate,
             llcontext: llcontext,
             builder: builder,
-            curr_loc: UnknownLocation,
+            current_debug_location: UnknownLocation,
             created_files: HashMap::new(),
             created_types: HashMap::new(),
+            namespace_map: HashMap::new(),
+            function_companion_namespaces: HashMap::new(),
         };
     }
 }
@@ -178,8 +182,22 @@ enum VariableKind {
     CapturedVariable,
 }
 
+pub fn initialize(cx: &mut CrateContext, crate: &ast::Crate) {
+    if cx.dbg_cx.is_none() {
+        return;
+    }
+
+    let crate_namespace_ident = token::str_to_ident(cx.link_meta.name);
+    let mut visitor = NamespaceVisitor::new_crate_visitor(cx, crate_namespace_ident);
+    visit::walk_crate(&mut visitor, crate, ());
+}
+
 /// Create any deferred debug metadata nodes
 pub fn finalize(cx: @mut CrateContext) {
+    if cx.dbg_cx.is_none() {
+        return;
+    }
+
     debug!("finalize");
     compile_unit_metadata(cx);
     unsafe {
@@ -573,22 +591,38 @@ pub fn create_function_debug_context(cx: &mut CrateContext,
     };
 
     // get_template_parameters() will append a `<...>` clause to the function name if necessary.
-    let mut function_name = cx.sess.str_of(ident).to_owned();
+    let mut function_name = token::ident_to_str(&ident).to_owned();
     let template_parameters = if cx.sess.opts.extra_debuginfo {
         get_template_parameters(cx, generics, param_substs, file_metadata, &mut function_name)
     } else {
         ptr::null()
     };
 
+    let namespace_node = debug_context(cx).namespace_map.find_copy(&fn_ast_id);
+    let (linkage_name, containing_scope) = match namespace_node {
+        Some(namespace_node) => {
+            (namespace_node.mangled_name_of_contained_item(function_name), namespace_node.scope)
+        }
+        None => {
+            // This branch is only hit when there is a bug in the NamespaceVisitor.
+            cx.sess.span_warn(span, "debuginfo: Could not find namespace node for function. \
+                                     This is a bug! Try running with RUST_LOG=rustc=1 \
+                                     to get further details and report the results \
+                                     to github.com/mozilla/rust/issues");
+            (function_name.clone(), file_metadata)
+        }
+    };
+
     let scope_line = get_scope_line(cx, top_level_block, loc.line);
 
-    let fn_metadata = do function_name.to_c_str().with_ref |function_name| {
+    let fn_metadata = do function_name.with_c_str |function_name| {
+                      do linkage_name.with_c_str |linkage_name| {
         unsafe {
             llvm::LLVMDIBuilderCreateFunction(
                 DIB(cx),
-                file_metadata,
-                function_name,
+                containing_scope,
                 function_name,
+                linkage_name,
                 file_metadata,
                 loc.line as c_uint,
                 function_type_metadata,
@@ -601,9 +635,9 @@ pub fn create_function_debug_context(cx: &mut CrateContext,
                 template_parameters,
                 ptr::null())
         }
-    };
+    }};
 
-    // Initialize fn debug context (including scope map)
+    // Initialize fn debug context (including scope map and namespace map)
     let mut fn_debug_context = ~FunctionDebugContextData {
         scope_map: HashMap::new(),
         fn_metadata: fn_metadata,
@@ -614,6 +648,18 @@ pub fn create_function_debug_context(cx: &mut CrateContext,
     let arg_pats = do fn_decl.inputs.map |arg_ref| { arg_ref.pat };
     populate_scope_map(cx, arg_pats, top_level_block, fn_metadata, &mut fn_debug_context.scope_map);
 
+    match top_level_block {
+        Some(top_level_block) => {
+            let mut namespace_visitor = NamespaceVisitor::new_function_visitor(cx,
+                                                                               function_name,
+                                                                               namespace_node,
+                                                                               file_metadata,
+                                                                               span);
+            visit::walk_block(&mut namespace_visitor, top_level_block, ());
+        }
+        _ => { /* nothing to do */}
+    }
+
     return FunctionDebugContext(fn_debug_context);
 
     fn get_function_signature(cx: &mut CrateContext,
@@ -644,7 +690,7 @@ pub fn create_function_debug_context(cx: &mut CrateContext,
             }
         }
 
-        // arguments types
+        // Arguments types
         for arg in fn_decl.inputs.iter() {
             let arg_type = ty::node_id_to_type(cx.tcx, arg.pat.id);
             let arg_type = match param_substs {
@@ -699,7 +745,7 @@ pub fn create_function_debug_context(cx: &mut CrateContext,
 
             let ident = special_idents::type_self;
 
-            let param_metadata = do cx.sess.str_of(ident).to_c_str().with_ref |name| {
+            let param_metadata = do token::ident_to_str(&ident).to_c_str().with_ref |name| {
                 unsafe {
                     llvm::LLVMDIBuilderCreateTemplateTypeParameter(
                         DIB(cx),
@@ -735,7 +781,7 @@ pub fn create_function_debug_context(cx: &mut CrateContext,
                 name_to_append_suffix_to.push_str(",");
             }
 
-            let param_metadata = do cx.sess.str_of(ident).to_c_str().with_ref |name| {
+            let param_metadata = do token::ident_to_str(&ident).to_c_str().with_ref |name| {
                 unsafe {
                     llvm::LLVMDIBuilderCreateTemplateTypeParameter(
                         DIB(cx),
@@ -783,7 +829,7 @@ fn create_DIArray(builder: DIBuilderRef, arr: &[DIDescriptor]) -> DIArray {
 }
 
 fn compile_unit_metadata(cx: @mut CrateContext) {
-    let dcx = dbg_cx(cx);
+    let dcx = debug_context(cx);
     let crate_name: &str = dcx.crate_file;
 
     debug!("compile_unit_metadata: %?", crate_name);
@@ -823,7 +869,7 @@ fn declare_local(bcx: @mut Block,
     let filename = span_start(cx, span).file.name;
     let file_metadata = file_metadata(cx, filename);
 
-    let name: &str = cx.sess.str_of(variable_ident);
+    let name: &str = token::ident_to_str(&variable_ident);
     let loc = span_start(cx, span);
     let type_metadata = type_metadata(cx, variable_type, span);
 
@@ -891,7 +937,7 @@ fn declare_local(bcx: @mut Block,
 }
 
 fn file_metadata(cx: &mut CrateContext, full_path: &str) -> DIFile {
-    match dbg_cx(cx).created_files.find_equiv(&full_path) {
+    match debug_context(cx).created_files.find_equiv(&full_path) {
         Some(file_metadata) => return *file_metadata,
         None => ()
     }
@@ -914,7 +960,7 @@ fn file_metadata(cx: &mut CrateContext, full_path: &str) -> DIFile {
             }
         }};
 
-    dbg_cx(cx).created_files.insert(full_path.to_owned(), file_metadata);
+    debug_context(cx).created_files.insert(full_path.to_owned(), file_metadata);
     return file_metadata;
 }
 
@@ -1017,7 +1063,7 @@ fn struct_metadata(cx: &mut CrateContext,
         if field.ident.name == special_idents::unnamed_field.name {
             ~""
         } else {
-            cx.sess.str_of(field.ident).to_owned()
+            token::ident_to_str(&field.ident).to_owned()
         }
     };
     let field_types_metadata = do fields.map |field| {
@@ -1086,7 +1132,7 @@ fn enum_metadata(cx: &mut CrateContext,
     let enumerators_metadata: ~[DIDescriptor] = variants
         .iter()
         .map(|v| {
-            let name: &str = cx.sess.str_of(v.name);
+            let name: &str = token::ident_to_str(&v.name);
             let discriminant_value = v.disr_val as c_ulonglong;
 
             do name.with_c_str |name| {
@@ -1197,7 +1243,7 @@ fn enum_metadata(cx: &mut CrateContext,
         }.collect();
 
         let mut arg_names = match variant_info.arg_names {
-            Some(ref names) => do names.map |ident| { cx.sess.str_of(*ident).to_owned() },
+            Some(ref names) => do names.map |ident| { token::ident_to_str(ident).to_owned() },
             None => do variant_info.args.map |_| { ~"" }
         };
 
@@ -1206,7 +1252,7 @@ fn enum_metadata(cx: &mut CrateContext,
         }
 
         let variant_llvm_type = Type::struct_(arg_llvm_types, struct_def.packed);
-        let variant_name: &str = cx.sess.str_of(variant_info.name);
+        let variant_name: &str = token::ident_to_str(&variant_info.name);
 
         return composite_type_metadata(
             cx,
@@ -1508,7 +1554,7 @@ fn type_metadata(cx: &mut CrateContext,
                  span: Span)
               -> DIType {
     let type_id = ty::type_id(t);
-    match dbg_cx(cx).created_types.find(&type_id) {
+    match debug_context(cx).created_types.find(&type_id) {
         Some(type_metadata) => return *type_metadata,
         None => ()
     }
@@ -1628,7 +1674,7 @@ fn type_metadata(cx: &mut CrateContext,
         _ => cx.sess.bug(fmt!("debuginfo: unexpected type in type_metadata: %?", sty))
     };
 
-    dbg_cx(cx).created_types.insert(type_id, type_metadata);
+    debug_context(cx).created_types.insert(type_id, type_metadata);
     return type_metadata;
 }
 
@@ -1649,7 +1695,7 @@ impl DebugLocation {
 }
 
 fn set_debug_location(cx: &mut CrateContext, debug_location: DebugLocation) {
-    if debug_location == dbg_cx(cx).curr_loc {
+    if debug_location == debug_context(cx).current_debug_location {
         return;
     }
 
@@ -1660,7 +1706,7 @@ fn set_debug_location(cx: &mut CrateContext, debug_location: DebugLocation) {
             debug!("setting debug location to %u %u", line, col);
             let elements = [C_i32(line as i32), C_i32(col as i32), scope, ptr::null()];
             unsafe {
-                metadata_node = llvm::LLVMMDNodeInContext(dbg_cx(cx).llcontext,
+                metadata_node = llvm::LLVMMDNodeInContext(debug_context(cx).llcontext,
                                                           vec::raw::to_ptr(elements),
                                                           elements.len() as c_uint);
             }
@@ -1675,7 +1721,7 @@ fn set_debug_location(cx: &mut CrateContext, debug_location: DebugLocation) {
         llvm::LLVMSetCurrentDebugLocation(cx.builder.B, metadata_node);
     }
 
-    dbg_cx(cx).curr_loc = debug_location;
+    debug_context(cx).current_debug_location = debug_location;
 }
 
 //=-------------------------------------------------------------------------------------------------
@@ -1701,7 +1747,7 @@ fn bytes_to_bits(bytes: uint) -> c_ulonglong {
 }
 
 #[inline]
-fn dbg_cx<'a>(cx: &'a mut CrateContext) -> &'a mut CrateDebugContext {
+fn debug_context<'a>(cx: &'a mut CrateContext) -> &'a mut CrateDebugContext {
     cx.dbg_cx.get_mut_ref()
 }
 
@@ -2179,3 +2225,165 @@ fn populate_scope_map(cx: &mut CrateContext,
         }
     }
 }
+
+
+//=-------------------------------------------------------------------------------------------------
+// Namespace Handling
+//=-------------------------------------------------------------------------------------------------
+
+struct NamespaceTree {
+    ident: ast::Ident,
+    scope: DIScope,
+    parent: Option<@NamespaceTree>,
+}
+
+impl NamespaceTree {
+    fn mangled_name_of_contained_item(&self, item_name: &str) -> ~str {
+        let mut name = ~"_ZN";
+        fill_nested(self, &mut name);
+
+        name.push_str(fmt!("%u%s", item_name.len(), item_name));
+        name.push_char('E');
+
+        return name;
+
+        fn fill_nested(node: &NamespaceTree, output: &mut ~str) {
+            match node.parent {
+                Some(parent) => {
+                    fill_nested(parent, output);
+                }
+                None => {}
+            }
+            let name = token::ident_to_str(&node.ident);
+            output.push_str(fmt!("%u%s", name.len(), name));
+        }
+    }
+}
+
+struct NamespaceVisitor<'self> {
+    module_ident: ast::Ident,
+    scope_stack: ~[@NamespaceTree],
+    crate_context: &'self mut CrateContext,
+}
+
+impl<'self> NamespaceVisitor<'self> {
+
+    fn new_crate_visitor<'a>(cx: &'a mut CrateContext,
+                             crate_ident: ast::Ident)
+                          -> NamespaceVisitor<'a> {
+        NamespaceVisitor {
+            module_ident: crate_ident,
+            scope_stack: ~[],
+            crate_context: cx,
+        }
+    }
+
+    fn new_function_visitor<'a>(cx: &'a mut CrateContext,
+                                function_name: &str,
+                                parent_node: Option<@NamespaceTree>,
+                                file_metadata: DIFile,
+                                span: Span)
+                             -> NamespaceVisitor<'a> {
+        let companion_name = function_name + "()";
+        let companion_ident = token::str_to_ident(companion_name);
+        let parent_scope = match parent_node {
+            Some(parent_node) => parent_node.scope,
+            None => ptr::null()
+        };
+        let line = span_start(cx, span).line as c_uint;
+
+        let namespace_metadata = unsafe {
+            do companion_name.with_c_str |companion_name| {
+                llvm::LLVMDIBuilderCreateNameSpace(
+                    DIB(cx),
+                    parent_scope,
+                    companion_name,
+                    file_metadata,
+                    line)
+            }
+        };
+
+        let function_node = @NamespaceTree {
+            scope: namespace_metadata,
+            ident: companion_ident,
+            parent: parent_node,
+        };
+
+        return NamespaceVisitor {
+            module_ident: special_idents::invalid,
+            scope_stack: ~[function_node],
+            crate_context: cx,
+        };
+    }
+}
+
+// Possible optimization: Only recurse if needed.
+impl<'self> visit::Visitor<()> for NamespaceVisitor<'self> {
+
+    fn visit_mod(&mut self,
+                 module: &ast::_mod,
+                 span: Span,
+                 _: ast::NodeId,
+                 _: ()) {
+        let module_name = token::ident_to_str(&self.module_ident);
+
+        let (parent_node, parent_scope) = if self.scope_stack.len() > 0 {
+            let parent_node = *self.scope_stack.last();
+            (Some(parent_node), parent_node.scope)
+        } else {
+            (None, ptr::null())
+        };
+
+        let loc = span_start(self.crate_context, span);
+        let file_metadata = file_metadata(self.crate_context, loc.file.name);
+
+        let namespace_metadata = unsafe {
+            do module_name.with_c_str |module_name| {
+                llvm::LLVMDIBuilderCreateNameSpace(
+                    DIB(self.crate_context),
+                    parent_scope,
+                    module_name,
+                    file_metadata,
+                    loc.line as c_uint)
+            }
+        };
+
+        let this_node = @NamespaceTree {
+            scope: namespace_metadata,
+            ident: self.module_ident,
+            parent: parent_node,
+        };
+
+        self.scope_stack.push(this_node);
+
+        visit::walk_mod(self, module, ());
+
+        self.scope_stack.pop();
+    }
+
+    fn visit_item(&mut self, item: @ast::item, _: ()) {
+        match item.node {
+            ast::item_mod(*) => {
+                // always store the last module ident so visit_mod() has it available
+                self.module_ident = item.ident;
+            }
+            ast::item_fn(*) => { /* handled by visit_fn */ }
+            _ => {
+                debug_context(self.crate_context).namespace_map.insert(item.id,
+                                                                       *self.scope_stack.last());
+            }
+        }
+
+        visit::walk_item(self, item, ());
+    }
+
+    fn visit_fn(&mut self,
+                function_kind: &visit::fn_kind,
+                _: &ast::fn_decl,
+                block: &ast::Block,
+                span: Span,
+                node_id: ast::NodeId,
+                _: ()) {
+        debug_context(self.crate_context).namespace_map.insert(node_id, *self.scope_stack.last());
+    }
+}
diff --git a/src/test/debug-info/basic-types.rs b/src/test/debug-info/basic-types.rs
index 5f769fceded..84d9c2c66cc 100644
--- a/src/test/debug-info/basic-types.rs
+++ b/src/test/debug-info/basic-types.rs
@@ -15,7 +15,7 @@
 // its numerical value.
 
 // compile-flags:-Z extra-debug-info
-// debugger:break _zzz
+// debugger:rbreak zzz
 // debugger:run
 // debugger:finish
 // debugger:print b
diff --git a/src/test/debug-info/borrowed-basic.rs b/src/test/debug-info/borrowed-basic.rs
index 8c19225311a..b02b4be2fd9 100644
--- a/src/test/debug-info/borrowed-basic.rs
+++ b/src/test/debug-info/borrowed-basic.rs
@@ -12,7 +12,7 @@
 // its numerical value.
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 // debugger:finish
 // debugger:print *bool_ref
diff --git a/src/test/debug-info/borrowed-c-style-enum.rs b/src/test/debug-info/borrowed-c-style-enum.rs
index b947cd80984..2461eb4887e 100644
--- a/src/test/debug-info/borrowed-c-style-enum.rs
+++ b/src/test/debug-info/borrowed-c-style-enum.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 // debugger:finish
 
diff --git a/src/test/debug-info/borrowed-enum.rs b/src/test/debug-info/borrowed-enum.rs
index 6ac02390225..9a9e71c7068 100644
--- a/src/test/debug-info/borrowed-enum.rs
+++ b/src/test/debug-info/borrowed-enum.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 // debugger:finish
 
diff --git a/src/test/debug-info/borrowed-managed-basic.rs b/src/test/debug-info/borrowed-managed-basic.rs
index c91f64973ad..35a222ffd04 100644
--- a/src/test/debug-info/borrowed-managed-basic.rs
+++ b/src/test/debug-info/borrowed-managed-basic.rs
@@ -12,7 +12,7 @@
 // its numerical value.
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 // debugger:finish
 // debugger:print *bool_ref
diff --git a/src/test/debug-info/borrowed-struct.rs b/src/test/debug-info/borrowed-struct.rs
index 75a47a0d8fe..42f7ffd8777 100644
--- a/src/test/debug-info/borrowed-struct.rs
+++ b/src/test/debug-info/borrowed-struct.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 // debugger:finish
 
diff --git a/src/test/debug-info/borrowed-tuple.rs b/src/test/debug-info/borrowed-tuple.rs
index 493cd2ab3e1..bcf73bae5ec 100644
--- a/src/test/debug-info/borrowed-tuple.rs
+++ b/src/test/debug-info/borrowed-tuple.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 // debugger:finish
 
diff --git a/src/test/debug-info/borrowed-unique-basic.rs b/src/test/debug-info/borrowed-unique-basic.rs
index 50ac34cbcf6..ac295783c9f 100644
--- a/src/test/debug-info/borrowed-unique-basic.rs
+++ b/src/test/debug-info/borrowed-unique-basic.rs
@@ -12,7 +12,7 @@
 // its numerical value.
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 // debugger:finish
 // debugger:print *bool_ref
diff --git a/src/test/debug-info/box.rs b/src/test/debug-info/box.rs
index 1a87392e6af..60ff5f789a8 100644
--- a/src/test/debug-info/box.rs
+++ b/src/test/debug-info/box.rs
@@ -10,7 +10,7 @@
 
 // compile-flags:-Z extra-debug-info
 // debugger:set print pretty off
-// debugger:break _zzz
+// debugger:rbreak zzz
 // debugger:run
 // debugger:finish
 // debugger:print *a
diff --git a/src/test/debug-info/boxed-struct.rs b/src/test/debug-info/boxed-struct.rs
index 03be8f7f220..e996b249d36 100644
--- a/src/test/debug-info/boxed-struct.rs
+++ b/src/test/debug-info/boxed-struct.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 // debugger:finish
 
diff --git a/src/test/debug-info/boxed-vec.rs b/src/test/debug-info/boxed-vec.rs
index b08f549e129..aa2a88afc46 100644
--- a/src/test/debug-info/boxed-vec.rs
+++ b/src/test/debug-info/boxed-vec.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 // debugger:finish
 
diff --git a/src/test/debug-info/by-value-non-immediate-argument.rs b/src/test/debug-info/by-value-non-immediate-argument.rs
index da9c79a00ed..45f8c134f2c 100644
--- a/src/test/debug-info/by-value-non-immediate-argument.rs
+++ b/src/test/debug-info/by-value-non-immediate-argument.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 
 // debugger:finish
diff --git a/src/test/debug-info/by-value-self-argument-in-trait-impl.rs b/src/test/debug-info/by-value-self-argument-in-trait-impl.rs
index 6e381c74a33..75e65178546 100644
--- a/src/test/debug-info/by-value-self-argument-in-trait-impl.rs
+++ b/src/test/debug-info/by-value-self-argument-in-trait-impl.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 
 // debugger:finish
diff --git a/src/test/debug-info/c-style-enum-in-composite.rs b/src/test/debug-info/c-style-enum-in-composite.rs
index 8baca2baa42..d3e27c85b74 100644
--- a/src/test/debug-info/c-style-enum-in-composite.rs
+++ b/src/test/debug-info/c-style-enum-in-composite.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 // debugger:finish
 
diff --git a/src/test/debug-info/c-style-enum.rs b/src/test/debug-info/c-style-enum.rs
index a60c28cedb4..f1bb42ac5f0 100644
--- a/src/test/debug-info/c-style-enum.rs
+++ b/src/test/debug-info/c-style-enum.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 // debugger:finish
 
diff --git a/src/test/debug-info/closure-in-generic-function.rs b/src/test/debug-info/closure-in-generic-function.rs
index 37ad6f173d1..83a2c456ae6 100644
--- a/src/test/debug-info/closure-in-generic-function.rs
+++ b/src/test/debug-info/closure-in-generic-function.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 
 // debugger:finish
diff --git a/src/test/debug-info/destructured-fn-argument.rs b/src/test/debug-info/destructured-fn-argument.rs
index 63b46875a49..49bbb7ed263 100644
--- a/src/test/debug-info/destructured-fn-argument.rs
+++ b/src/test/debug-info/destructured-fn-argument.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 
 // debugger:finish
diff --git a/src/test/debug-info/destructured-local.rs b/src/test/debug-info/destructured-local.rs
index 424e195e681..8115d298570 100644
--- a/src/test/debug-info/destructured-local.rs
+++ b/src/test/debug-info/destructured-local.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 // debugger:finish
 
diff --git a/src/test/debug-info/evec-in-struct.rs b/src/test/debug-info/evec-in-struct.rs
index de556bb1772..a00e1318967 100644
--- a/src/test/debug-info/evec-in-struct.rs
+++ b/src/test/debug-info/evec-in-struct.rs
@@ -10,7 +10,7 @@
 
 // compile-flags:-Z extra-debug-info
 // debugger:set print pretty off
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 // debugger:finish
 
diff --git a/src/test/debug-info/function-arguments.rs b/src/test/debug-info/function-arguments.rs
index 5a410ef6462..6ae7b027075 100644
--- a/src/test/debug-info/function-arguments.rs
+++ b/src/test/debug-info/function-arguments.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 // debugger:finish
 
@@ -43,4 +43,4 @@ fn fun(x: int, y: bool) -> (int, bool) {
     (x, y)
 }
 
-fn zzz() {()}
\ No newline at end of file
+fn zzz() {()}
diff --git a/src/test/debug-info/generic-function.rs b/src/test/debug-info/generic-function.rs
index 1bde5acd9f6..22f565ceee5 100644
--- a/src/test/debug-info/generic-function.rs
+++ b/src/test/debug-info/generic-function.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 
 // debugger:finish
diff --git a/src/test/debug-info/generic-functions-nested.rs b/src/test/debug-info/generic-functions-nested.rs
index 3151562f3f2..051b2054219 100644
--- a/src/test/debug-info/generic-functions-nested.rs
+++ b/src/test/debug-info/generic-functions-nested.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 
 // debugger:finish
diff --git a/src/test/debug-info/generic-method-on-generic-struct.rs b/src/test/debug-info/generic-method-on-generic-struct.rs
index 131f89c5a6d..f97a3cea566 100644
--- a/src/test/debug-info/generic-method-on-generic-struct.rs
+++ b/src/test/debug-info/generic-method-on-generic-struct.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 
 // STACK BY REF
diff --git a/src/test/debug-info/generic-static-method-on-struct-and-enum.rs b/src/test/debug-info/generic-static-method-on-struct-and-enum.rs
index f7ecad0b095..8e82f0f27b9 100644
--- a/src/test/debug-info/generic-static-method-on-struct-and-enum.rs
+++ b/src/test/debug-info/generic-static-method-on-struct-and-enum.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 
 // STRUCT
diff --git a/src/test/debug-info/generic-struct-style-enum.rs b/src/test/debug-info/generic-struct-style-enum.rs
index 6a8f81aa843..81b12fe60ae 100644
--- a/src/test/debug-info/generic-struct-style-enum.rs
+++ b/src/test/debug-info/generic-struct-style-enum.rs
@@ -10,7 +10,7 @@
 
 // compile-flags:-Z extra-debug-info
 // debugger:set print union on
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 // debugger:finish
 
diff --git a/src/test/debug-info/generic-struct.rs b/src/test/debug-info/generic-struct.rs
index efc250018c1..cf6286e9541 100644
--- a/src/test/debug-info/generic-struct.rs
+++ b/src/test/debug-info/generic-struct.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 
 // debugger:finish
diff --git a/src/test/debug-info/generic-trait-generic-static-default-method.rs b/src/test/debug-info/generic-trait-generic-static-default-method.rs
index 9dd6d1ef173..8523a947aac 100644
--- a/src/test/debug-info/generic-trait-generic-static-default-method.rs
+++ b/src/test/debug-info/generic-trait-generic-static-default-method.rs
@@ -11,7 +11,7 @@
 // except according to those terms.
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 
 // debugger:finish
diff --git a/src/test/debug-info/generic-tuple-style-enum.rs b/src/test/debug-info/generic-tuple-style-enum.rs
index b97fa7b636b..0b9f9350547 100644
--- a/src/test/debug-info/generic-tuple-style-enum.rs
+++ b/src/test/debug-info/generic-tuple-style-enum.rs
@@ -10,7 +10,7 @@
 
 // compile-flags:-Z extra-debug-info
 // debugger:set print union on
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 // debugger:finish
 
diff --git a/src/test/debug-info/lexical-scope-in-for-loop.rs b/src/test/debug-info/lexical-scope-in-for-loop.rs
index ed2f9e1a0c4..0a2cb953f00 100644
--- a/src/test/debug-info/lexical-scope-in-for-loop.rs
+++ b/src/test/debug-info/lexical-scope-in-for-loop.rs
@@ -11,7 +11,7 @@
 // xfail-win32
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 
 // FIRST ITERATION
diff --git a/src/test/debug-info/lexical-scope-in-if.rs b/src/test/debug-info/lexical-scope-in-if.rs
index cc637f55fee..89fd84daede 100644
--- a/src/test/debug-info/lexical-scope-in-if.rs
+++ b/src/test/debug-info/lexical-scope-in-if.rs
@@ -11,7 +11,7 @@
 // xfail-win32
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 
 // BEFORE if
diff --git a/src/test/debug-info/lexical-scope-in-managed-closure.rs b/src/test/debug-info/lexical-scope-in-managed-closure.rs
index 8af674d5ebd..96da78a9192 100644
--- a/src/test/debug-info/lexical-scope-in-managed-closure.rs
+++ b/src/test/debug-info/lexical-scope-in-managed-closure.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 
 // debugger:finish
diff --git a/src/test/debug-info/lexical-scope-in-match.rs b/src/test/debug-info/lexical-scope-in-match.rs
index fe57f1f588e..1216e9fde1e 100644
--- a/src/test/debug-info/lexical-scope-in-match.rs
+++ b/src/test/debug-info/lexical-scope-in-match.rs
@@ -11,7 +11,7 @@
 // xfail-win32
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 
 // debugger:finish
diff --git a/src/test/debug-info/lexical-scope-in-stack-closure.rs b/src/test/debug-info/lexical-scope-in-stack-closure.rs
index 101b076a460..744c77b2735 100644
--- a/src/test/debug-info/lexical-scope-in-stack-closure.rs
+++ b/src/test/debug-info/lexical-scope-in-stack-closure.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 
 // debugger:finish
diff --git a/src/test/debug-info/lexical-scope-in-unconditional-loop.rs b/src/test/debug-info/lexical-scope-in-unconditional-loop.rs
index 6031a0ac714..beb9211cc32 100644
--- a/src/test/debug-info/lexical-scope-in-unconditional-loop.rs
+++ b/src/test/debug-info/lexical-scope-in-unconditional-loop.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 
 // FIRST ITERATION
diff --git a/src/test/debug-info/lexical-scope-in-unique-closure.rs b/src/test/debug-info/lexical-scope-in-unique-closure.rs
index e167d7637ad..6d8ca457efe 100644
--- a/src/test/debug-info/lexical-scope-in-unique-closure.rs
+++ b/src/test/debug-info/lexical-scope-in-unique-closure.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 
 // debugger:finish
diff --git a/src/test/debug-info/lexical-scope-in-while.rs b/src/test/debug-info/lexical-scope-in-while.rs
index 2a3071ba496..80010bdd262 100644
--- a/src/test/debug-info/lexical-scope-in-while.rs
+++ b/src/test/debug-info/lexical-scope-in-while.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 
 // FIRST ITERATION
diff --git a/src/test/debug-info/lexical-scope-with-macro.rs b/src/test/debug-info/lexical-scope-with-macro.rs
index 1223786eb18..9e87eee692d 100644
--- a/src/test/debug-info/lexical-scope-with-macro.rs
+++ b/src/test/debug-info/lexical-scope-with-macro.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 
 // debugger:finish
diff --git a/src/test/debug-info/lexical-scopes-in-block-expression.rs b/src/test/debug-info/lexical-scopes-in-block-expression.rs
index ea2a7f0d94a..652561c6aef 100644
--- a/src/test/debug-info/lexical-scopes-in-block-expression.rs
+++ b/src/test/debug-info/lexical-scopes-in-block-expression.rs
@@ -11,7 +11,7 @@
 // xfail-win32
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 
 // STRUCT EXPRESSION
diff --git a/src/test/debug-info/managed-enum.rs b/src/test/debug-info/managed-enum.rs
index 99452dc255a..87aa3d1dfc1 100644
--- a/src/test/debug-info/managed-enum.rs
+++ b/src/test/debug-info/managed-enum.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 // debugger:finish
 
diff --git a/src/test/debug-info/managed-pointer-within-unique-vec.rs b/src/test/debug-info/managed-pointer-within-unique-vec.rs
index 35df9454e10..d4ec7094e8c 100644
--- a/src/test/debug-info/managed-pointer-within-unique-vec.rs
+++ b/src/test/debug-info/managed-pointer-within-unique-vec.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 // debugger:finish
 
diff --git a/src/test/debug-info/managed-pointer-within-unique.rs b/src/test/debug-info/managed-pointer-within-unique.rs
index e007f012ce2..9ea713c2982 100644
--- a/src/test/debug-info/managed-pointer-within-unique.rs
+++ b/src/test/debug-info/managed-pointer-within-unique.rs
@@ -10,7 +10,7 @@
 
 // compile-flags:-Z extra-debug-info
 // debugger:set print pretty off
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 // debugger:finish
 
diff --git a/src/test/debug-info/method-on-enum.rs b/src/test/debug-info/method-on-enum.rs
index c68b4e7deed..d428d230d45 100644
--- a/src/test/debug-info/method-on-enum.rs
+++ b/src/test/debug-info/method-on-enum.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 
 // STACK BY REF
diff --git a/src/test/debug-info/method-on-generic-struct.rs b/src/test/debug-info/method-on-generic-struct.rs
index 4c793a6d9c7..63fd6c996ff 100644
--- a/src/test/debug-info/method-on-generic-struct.rs
+++ b/src/test/debug-info/method-on-generic-struct.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 
 // STACK BY REF
diff --git a/src/test/debug-info/method-on-struct.rs b/src/test/debug-info/method-on-struct.rs
index 5711c945b65..249c3a073a2 100644
--- a/src/test/debug-info/method-on-struct.rs
+++ b/src/test/debug-info/method-on-struct.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 
 // STACK BY REF
diff --git a/src/test/debug-info/method-on-trait.rs b/src/test/debug-info/method-on-trait.rs
index c2f3a7f4324..07a29f3ece3 100644
--- a/src/test/debug-info/method-on-trait.rs
+++ b/src/test/debug-info/method-on-trait.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 
 // STACK BY REF
diff --git a/src/test/debug-info/method-on-tuple-struct.rs b/src/test/debug-info/method-on-tuple-struct.rs
index e14880ae1a0..d4354709a86 100644
--- a/src/test/debug-info/method-on-tuple-struct.rs
+++ b/src/test/debug-info/method-on-tuple-struct.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 
 // STACK BY REF
diff --git a/src/test/debug-info/multiple-functions-equal-var-names.rs b/src/test/debug-info/multiple-functions-equal-var-names.rs
index 32b3da07411..881e2547cfc 100644
--- a/src/test/debug-info/multiple-functions-equal-var-names.rs
+++ b/src/test/debug-info/multiple-functions-equal-var-names.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 // debugger:finish
 
diff --git a/src/test/debug-info/multiple-functions.rs b/src/test/debug-info/multiple-functions.rs
index be26af4fe2f..880954ce531 100644
--- a/src/test/debug-info/multiple-functions.rs
+++ b/src/test/debug-info/multiple-functions.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 // debugger:finish
 
diff --git a/src/test/debug-info/name-shadowing-and-scope-nesting.rs b/src/test/debug-info/name-shadowing-and-scope-nesting.rs
index 739d3aa78f4..273ca255061 100644
--- a/src/test/debug-info/name-shadowing-and-scope-nesting.rs
+++ b/src/test/debug-info/name-shadowing-and-scope-nesting.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 
 // debugger:finish
diff --git a/src/test/debug-info/nil-enum.rs b/src/test/debug-info/nil-enum.rs
index 94e5b706ac6..9dc4edfb159 100644
--- a/src/test/debug-info/nil-enum.rs
+++ b/src/test/debug-info/nil-enum.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 // debugger:finish
 
diff --git a/src/test/debug-info/option-like-enum.rs b/src/test/debug-info/option-like-enum.rs
index a75f4ff0086..5c0ffe24f0e 100644
--- a/src/test/debug-info/option-like-enum.rs
+++ b/src/test/debug-info/option-like-enum.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 // debugger:finish
 
diff --git a/src/test/debug-info/packed-struct-with-destructor.rs b/src/test/debug-info/packed-struct-with-destructor.rs
index 90033b9c4e6..47e4a26ab4b 100644
--- a/src/test/debug-info/packed-struct-with-destructor.rs
+++ b/src/test/debug-info/packed-struct-with-destructor.rs
@@ -10,7 +10,7 @@
 
 // compile-flags:-Z extra-debug-info
 // debugger:set print pretty off
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 // debugger:finish
 
diff --git a/src/test/debug-info/packed-struct.rs b/src/test/debug-info/packed-struct.rs
index 203f6595a04..8d3fc4babb8 100644
--- a/src/test/debug-info/packed-struct.rs
+++ b/src/test/debug-info/packed-struct.rs
@@ -10,7 +10,7 @@
 
 // compile-flags:-Z extra-debug-info
 // debugger:set print pretty off
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 // debugger:finish
 
diff --git a/src/test/debug-info/self-in-default-method.rs b/src/test/debug-info/self-in-default-method.rs
index 426d2f46e6b..53b2e9ee21d 100644
--- a/src/test/debug-info/self-in-default-method.rs
+++ b/src/test/debug-info/self-in-default-method.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 
 // STACK BY REF
diff --git a/src/test/debug-info/self-in-generic-default-method.rs b/src/test/debug-info/self-in-generic-default-method.rs
index 16a028808e7..47f58930760 100644
--- a/src/test/debug-info/self-in-generic-default-method.rs
+++ b/src/test/debug-info/self-in-generic-default-method.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 
 // STACK BY REF
diff --git a/src/test/debug-info/shadowed-argument.rs b/src/test/debug-info/shadowed-argument.rs
index a6a7b34c87b..adc240e40d5 100644
--- a/src/test/debug-info/shadowed-argument.rs
+++ b/src/test/debug-info/shadowed-argument.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 
 // debugger:finish
diff --git a/src/test/debug-info/shadowed-variable.rs b/src/test/debug-info/shadowed-variable.rs
index 9018e24691e..acc8cf3b654 100644
--- a/src/test/debug-info/shadowed-variable.rs
+++ b/src/test/debug-info/shadowed-variable.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 
 // debugger:finish
diff --git a/src/test/debug-info/simple-lexical-scope.rs b/src/test/debug-info/simple-lexical-scope.rs
index 11e890c44fa..fbcee4f0ae2 100644
--- a/src/test/debug-info/simple-lexical-scope.rs
+++ b/src/test/debug-info/simple-lexical-scope.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 
 // debugger:finish
diff --git a/src/test/debug-info/simple-struct.rs b/src/test/debug-info/simple-struct.rs
index 01cc163d7aa..a47472af1ef 100644
--- a/src/test/debug-info/simple-struct.rs
+++ b/src/test/debug-info/simple-struct.rs
@@ -10,7 +10,7 @@
 
 // compile-flags:-Z extra-debug-info
 // debugger:set print pretty off
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 // debugger:finish
 
diff --git a/src/test/debug-info/simple-tuple.rs b/src/test/debug-info/simple-tuple.rs
index ee65e4dcb20..1e4c53427b2 100644
--- a/src/test/debug-info/simple-tuple.rs
+++ b/src/test/debug-info/simple-tuple.rs
@@ -10,7 +10,7 @@
 
 // compile-flags:-Z extra-debug-info
 // debugger:set print pretty off
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 // debugger:finish
 
diff --git a/src/test/debug-info/static-method-on-struct-and-enum.rs b/src/test/debug-info/static-method-on-struct-and-enum.rs
index 5cf0bbdc8cf..0d1ce28094a 100644
--- a/src/test/debug-info/static-method-on-struct-and-enum.rs
+++ b/src/test/debug-info/static-method-on-struct-and-enum.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 
 // STRUCT
diff --git a/src/test/debug-info/struct-in-enum.rs b/src/test/debug-info/struct-in-enum.rs
index 8542dd867f4..a821ce21d50 100644
--- a/src/test/debug-info/struct-in-enum.rs
+++ b/src/test/debug-info/struct-in-enum.rs
@@ -10,7 +10,7 @@
 
 // compile-flags:-Z extra-debug-info
 // debugger:set print union on
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 // debugger:finish
 
diff --git a/src/test/debug-info/struct-in-struct.rs b/src/test/debug-info/struct-in-struct.rs
index 307d141c3e2..f1690fba354 100644
--- a/src/test/debug-info/struct-in-struct.rs
+++ b/src/test/debug-info/struct-in-struct.rs
@@ -10,7 +10,7 @@
 
 // compile-flags:-Z extra-debug-info
 // debugger:set print pretty off
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 // debugger:finish
 
diff --git a/src/test/debug-info/struct-style-enum.rs b/src/test/debug-info/struct-style-enum.rs
index fe6845a9077..acd2526a68d 100644
--- a/src/test/debug-info/struct-style-enum.rs
+++ b/src/test/debug-info/struct-style-enum.rs
@@ -10,7 +10,7 @@
 
 // compile-flags:-Z extra-debug-info
 // debugger:set print union on
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 // debugger:finish
 
diff --git a/src/test/debug-info/struct-with-destructor.rs b/src/test/debug-info/struct-with-destructor.rs
index 2dc1bfbf236..8994a582b58 100644
--- a/src/test/debug-info/struct-with-destructor.rs
+++ b/src/test/debug-info/struct-with-destructor.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 // debugger:finish
 // debugger:print simple
diff --git a/src/test/debug-info/trait-generic-static-default-method.rs b/src/test/debug-info/trait-generic-static-default-method.rs
index 2d666bf4cf5..1f6e6992e27 100644
--- a/src/test/debug-info/trait-generic-static-default-method.rs
+++ b/src/test/debug-info/trait-generic-static-default-method.rs
@@ -11,7 +11,7 @@
 // except according to those terms.
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 
 // debugger:finish
diff --git a/src/test/debug-info/tuple-in-struct.rs b/src/test/debug-info/tuple-in-struct.rs
index e5844cd19a7..25a08b3f57a 100644
--- a/src/test/debug-info/tuple-in-struct.rs
+++ b/src/test/debug-info/tuple-in-struct.rs
@@ -10,7 +10,7 @@
 
 // compile-flags:-Z extra-debug-info
 // debugger:set print pretty off
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 // debugger:finish
 
diff --git a/src/test/debug-info/tuple-in-tuple.rs b/src/test/debug-info/tuple-in-tuple.rs
index 8a50760bcc2..14dd671bb94 100644
--- a/src/test/debug-info/tuple-in-tuple.rs
+++ b/src/test/debug-info/tuple-in-tuple.rs
@@ -10,7 +10,7 @@
 
 // compile-flags:-Z extra-debug-info
 // debugger:set print pretty off
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 // debugger:finish
 
diff --git a/src/test/debug-info/tuple-struct.rs b/src/test/debug-info/tuple-struct.rs
index 762b8dcb38f..63a74ecbe4a 100644
--- a/src/test/debug-info/tuple-struct.rs
+++ b/src/test/debug-info/tuple-struct.rs
@@ -10,7 +10,7 @@
 
 // compile-flags:-Z extra-debug-info
 // debugger:set print pretty off
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 // debugger:finish
 
diff --git a/src/test/debug-info/tuple-style-enum.rs b/src/test/debug-info/tuple-style-enum.rs
index 29950e6c766..fef6b449a9b 100644
--- a/src/test/debug-info/tuple-style-enum.rs
+++ b/src/test/debug-info/tuple-style-enum.rs
@@ -10,7 +10,7 @@
 
 // compile-flags:-Z extra-debug-info
 // debugger:set print union on
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 // debugger:finish
 
diff --git a/src/test/debug-info/unique-enum.rs b/src/test/debug-info/unique-enum.rs
index 8c085b1c62b..0995cec11a3 100644
--- a/src/test/debug-info/unique-enum.rs
+++ b/src/test/debug-info/unique-enum.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 // debugger:finish
 
diff --git a/src/test/debug-info/var-captured-in-managed-closure.rs b/src/test/debug-info/var-captured-in-managed-closure.rs
index 002bfbd2242..b20f40378d3 100644
--- a/src/test/debug-info/var-captured-in-managed-closure.rs
+++ b/src/test/debug-info/var-captured-in-managed-closure.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 // debugger:finish
 
diff --git a/src/test/debug-info/var-captured-in-nested-closure.rs b/src/test/debug-info/var-captured-in-nested-closure.rs
index cd20209ddfd..920052eb80e 100644
--- a/src/test/debug-info/var-captured-in-nested-closure.rs
+++ b/src/test/debug-info/var-captured-in-nested-closure.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 // debugger:finish
 
diff --git a/src/test/debug-info/var-captured-in-sendable-closure.rs b/src/test/debug-info/var-captured-in-sendable-closure.rs
index 01839ea7835..f113c6ea4be 100644
--- a/src/test/debug-info/var-captured-in-sendable-closure.rs
+++ b/src/test/debug-info/var-captured-in-sendable-closure.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 // debugger:finish
 
diff --git a/src/test/debug-info/var-captured-in-stack-closure.rs b/src/test/debug-info/var-captured-in-stack-closure.rs
index 3ce7d6fd89b..e16539d3396 100644
--- a/src/test/debug-info/var-captured-in-stack-closure.rs
+++ b/src/test/debug-info/var-captured-in-stack-closure.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // compile-flags:-Z extra-debug-info
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 // debugger:finish
 
diff --git a/src/test/debug-info/vec-slices.rs b/src/test/debug-info/vec-slices.rs
index 95679f3a616..9e5fb9236db 100644
--- a/src/test/debug-info/vec-slices.rs
+++ b/src/test/debug-info/vec-slices.rs
@@ -10,7 +10,7 @@
 
 // compile-flags:-Z extra-debug-info
 // debugger:set print pretty off
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 // debugger:finish
 // debugger:print empty.size_in_bytes
diff --git a/src/test/debug-info/vec.rs b/src/test/debug-info/vec.rs
index 0dc52c7b220..bc10b5ec8b7 100644
--- a/src/test/debug-info/vec.rs
+++ b/src/test/debug-info/vec.rs
@@ -10,7 +10,7 @@
 
 // compile-flags:-Z extra-debug-info
 // debugger:set print pretty off
-// debugger:break zzz
+// debugger:rbreak zzz
 // debugger:run
 // debugger:finish
 // debugger:print a