diff --git a/src/librustc/middle/trans/debuginfo.rs b/src/librustc/middle/trans/debuginfo.rs
index fec70bd4a1b..b3645a6df5f 100644
--- a/src/librustc/middle/trans/debuginfo.rs
+++ b/src/librustc/middle/trans/debuginfo.rs
@@ -250,7 +250,7 @@ impl FunctionDebugContext {
 struct FunctionDebugContextData {
     scope_map: RefCell<HashMap<ast::NodeId, DIScope>>,
     fn_metadata: DISubprogram,
-    argument_counter: uint,
+    argument_counter: Cell<uint>,
     source_locations_enabled: bool,
 }
 
@@ -460,8 +460,8 @@ pub fn create_self_argument_metadata(bcx: @Block,
 
     let argument_index = {
         let counter = &mut bcx.fcx.debug_context.get_mut_ref(bcx.ccx(), span).argument_counter;
-        let argument_index = *counter;
-        *counter += 1;
+        let argument_index = counter.get();
+        counter.set(argument_index + 1);
         argument_index
     };
 
@@ -538,9 +538,9 @@ pub fn create_argument_metadata(bcx: @Block,
         let argument_ident = ast_util::path_to_ident(path_ref);
 
         let argument_index = {
-            let counter = &mut fcx.debug_context.get_mut_ref(cx, span).argument_counter;
-            let argument_index = *counter;
-            *counter += 1;
+            let counter = &fcx.debug_context.get_mut_ref(cx, span).argument_counter;
+            let argument_index = counter.get();
+            counter.set(argument_index + 1);
             argument_index
         };
 
@@ -761,10 +761,10 @@ pub fn create_function_debug_context(cx: &CrateContext,
     });
 
     // Initialize fn debug context (including scope map and namespace map)
-    let mut fn_debug_context = ~FunctionDebugContextData {
+    let fn_debug_context = ~FunctionDebugContextData {
         scope_map: RefCell::new(HashMap::new()),
         fn_metadata: fn_metadata,
-        argument_counter: 1,
+        argument_counter: Cell::new(1),
         source_locations_enabled: false,
     };