Skip to content

Commit

Permalink
Rollup merge of #60501 - taiki-e:async-await-mutable-arguments, r=cra…
Browse files Browse the repository at this point in the history
…mertj

Propagate mutability from arguments to local bindings in async fn

Fixes #60498

cc @nikomatsakis
r? @davidtwco
  • Loading branch information
Centril committed May 3, 2019
2 parents d5809a8 + 2fe50bc commit 6f7a1ea
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 6 deletions.
10 changes: 4 additions & 6 deletions src/libsyntax/parse/parser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8725,9 +8725,9 @@ impl<'a> Parser<'a> {
// Check if this is a ident pattern, if so, we can optimize and avoid adding a
// `let <pat> = __argN;` statement, instead just adding a `let <pat> = <pat>;`
// statement.
let (ident, is_simple_pattern) = match input.pat.node {
PatKind::Ident(_, ident, _) => (ident, true),
_ => (ident, false),
let (binding_mode, ident, is_simple_pattern) = match input.pat.node {
PatKind::Ident(binding_mode, ident, _) => (binding_mode, ident, true),
_ => (BindingMode::ByValue(Mutability::Immutable), ident, false),
};

// Construct an argument representing `__argN: <ty>` to replace the argument of the
Expand Down Expand Up @@ -8755,9 +8755,7 @@ impl<'a> Parser<'a> {
let move_local = Local {
pat: P(Pat {
id,
node: PatKind::Ident(
BindingMode::ByValue(Mutability::Immutable), ident, None,
),
node: PatKind::Ident(binding_mode, ident, None),
span,
}),
// We explicitly do not specify the type for this statement. When the user's
Expand Down
10 changes: 10 additions & 0 deletions src/test/ui/async-await/mutable-arguments.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
// edition:2018
// run-pass

#![feature(async_await)]

async fn foo(n: u32, mut vec: Vec<u32>) {
vec.push(n);
}

fn main() {}

0 comments on commit 6f7a1ea

Please sign in to comment.