about summary refs log tree commit diff
path: root/compiler
diff options
context:
space:
mode:
authorJoshua Nelson <jyn514@gmail.com>2020-11-08 11:45:13 -0500
committerJoshua Nelson <jyn514@gmail.com>2020-11-12 11:13:05 -0500
commit2baa0ceff4e6dc75751fdca4be68e87f5cf35a6e (patch)
tree2cd8bec01e33fc21d2d41ac8490434c7691c21be /compiler
parent380b222f52ee2f506d35ba89bbd8f83f6469f31f (diff)
downloadrust-2baa0ceff4e6dc75751fdca4be68e87f5cf35a6e.tar.gz
rust-2baa0ceff4e6dc75751fdca4be68e87f5cf35a6e.zip
Don't reuse bindings for `ref mut`
Reusing bindings causes errors later in lowering:

```
 error[E0596]: cannot borrow `vec` as mutable, as it is not declared as mutable
  --> /checkout/src/test/ui/async-await/argument-patterns.rs:12:20
   |
LL | async fn b(n: u32, ref mut vec: A) {
   |                    ^^^^^^^^^^^
   |                    |
   |                    cannot borrow as mutable
   |                    help: consider changing this to be mutable: `mut vec`
```
Diffstat (limited to 'compiler')
-rw-r--r--compiler/rustc_ast_lowering/src/item.rs4
1 files changed, 4 insertions, 0 deletions
diff --git a/compiler/rustc_ast_lowering/src/item.rs b/compiler/rustc_ast_lowering/src/item.rs
index 0cfcd843ddd..1335bb02580 100644
--- a/compiler/rustc_ast_lowering/src/item.rs
+++ b/compiler/rustc_ast_lowering/src/item.rs
@@ -1102,6 +1102,10 @@ impl<'hir> LoweringContext<'_, 'hir> {
                         ident,
                         _,
                     ) => (ident, true),
+                    // For `ref mut` arguments, we can't reuse the binding, but
+                    // we can keep the same name for the parameter.
+                    // This lets rustdoc render it correctly in documentation.
+                    hir::PatKind::Binding(_, _, ident, _) => (ident, false),
                     _ => {
                         // Replace the ident for bindings that aren't simple.
                         let name = format!("__arg{}", index);