Fix mem_categorization to treat an AutoObject adjustment as an rvalue.
Currently mem_categorization categorizes an AutoObject adjustment the same as the original expression. This can cause two moves to be generated for the same underlying expression. Currently this isn't a problem in practice, since check_loans doesn't rely on ExprUseVisitor.
This commit is contained in:
parent
d123188b20
commit
0339b27e6d
1 changed files with 3 additions and 5 deletions
|
@ -390,12 +390,10 @@ impl<'t,TYPER:Typer> MemCategorizationContext<'t,TYPER> {
|
||||||
Some(adjustment) => {
|
Some(adjustment) => {
|
||||||
match *adjustment {
|
match *adjustment {
|
||||||
ty::AutoObject(..) => {
|
ty::AutoObject(..) => {
|
||||||
// Implicity casts a concrete object to trait object
|
// Implicity cast a concrete object to trait object.
|
||||||
// so just patch up the type
|
// Result is an rvalue.
|
||||||
let expr_ty = if_ok!(self.expr_ty_adjusted(expr));
|
let expr_ty = if_ok!(self.expr_ty_adjusted(expr));
|
||||||
let mut expr_cmt = (*if_ok!(self.cat_expr_unadjusted(expr))).clone();
|
Ok(self.cat_rvalue_node(expr.id(), expr.span(), expr_ty))
|
||||||
expr_cmt.ty = expr_ty;
|
|
||||||
Ok(Rc::new(expr_cmt))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ty::AutoAddEnv(..) => {
|
ty::AutoAddEnv(..) => {
|
||||||
|
|
Loading…
Reference in a new issue