about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorThomas Bahn <thomas@thomas-bahn.net>2020-12-19 23:13:50 +0100
committerThomas Bahn <thomas@thomas-bahn.net>2020-12-20 13:11:07 +0100
commitb05ab18aec28c5025212ad44a202072ed2f610d7 (patch)
tree4c24cf8947c9ed79b37dde8d54b7d55215ad6cb8 /src
parentb1964e60b72c2d10e9fd4e801990f8af3f306ac0 (diff)
downloadrust-b05ab18aec28c5025212ad44a202072ed2f610d7.tar.gz
rust-b05ab18aec28c5025212ad44a202072ed2f610d7.zip
Fix pretty printing an AST representing `&(mut ident)`
`PatKind::Ref(PatKind::Ident(BindingMode::ByValue(Mutability::Mut), ..), ..)`
is an AST representing `&(mut ident)`. It was errorneously printed as
`&mut ident` which reparsed into a syntactically different AST.

This affected help diagnostics in the parser.
Diffstat (limited to 'src')
-rw-r--r--src/test/ui/pattern/issue-80186-mut-binding-help-suggestion.rs9
-rw-r--r--src/test/ui/pattern/issue-80186-mut-binding-help-suggestion.stderr10
2 files changed, 19 insertions, 0 deletions
diff --git a/src/test/ui/pattern/issue-80186-mut-binding-help-suggestion.rs b/src/test/ui/pattern/issue-80186-mut-binding-help-suggestion.rs
new file mode 100644
index 00000000000..a5e9b1db546
--- /dev/null
+++ b/src/test/ui/pattern/issue-80186-mut-binding-help-suggestion.rs
@@ -0,0 +1,9 @@
+// Regression test for correct pretty-printing of an AST representing `&(mut x)` in help
+// suggestion diagnostic.
+
+fn main() {
+    let mut &x = &0;
+    //~^ ERROR `mut` must be attached to each individual binding
+    //~| HELP add `mut` to each binding
+    //~| SUGGESTION &(mut x)
+}
diff --git a/src/test/ui/pattern/issue-80186-mut-binding-help-suggestion.stderr b/src/test/ui/pattern/issue-80186-mut-binding-help-suggestion.stderr
new file mode 100644
index 00000000000..75b6c163b2c
--- /dev/null
+++ b/src/test/ui/pattern/issue-80186-mut-binding-help-suggestion.stderr
@@ -0,0 +1,10 @@
+error: `mut` must be attached to each individual binding
+  --> $DIR/issue-80186-mut-binding-help-suggestion.rs:5:9
+   |
+LL |     let mut &x = &0;
+   |         ^^^^^^ help: add `mut` to each binding: `&(mut x)`
+   |
+   = note: `mut` may be followed by `variable` and `variable @ pattern`
+
+error: aborting due to previous error
+