try to fix lvalue ops for real
Hopefully this is the last PR needed. Fixes #41726. Fixes #41742. Fixes #41774.
This commit is contained in:
parent
ced823e267
commit
052d071bb2
4 changed files with 109 additions and 17 deletions
17
src/test/compile-fail/issue-41726.rs
Normal file
17
src/test/compile-fail/issue-41726.rs
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
use std::collections::HashMap;
|
||||
fn main() {
|
||||
let things: HashMap<String, Vec<String>> = HashMap::new();
|
||||
for src in things.keys() {
|
||||
things[src.as_str()].sort(); //~ ERROR cannot borrow immutable
|
||||
}
|
||||
}
|
||||
35
src/test/compile-fail/issue-41742.rs
Normal file
35
src/test/compile-fail/issue-41742.rs
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
use std::ops::{Index, IndexMut};
|
||||
|
||||
struct S;
|
||||
struct H;
|
||||
|
||||
impl S {
|
||||
fn f(&mut self) {}
|
||||
}
|
||||
|
||||
impl Index<u32> for H {
|
||||
type Output = S;
|
||||
fn index(&self, index: u32) -> &S {
|
||||
unimplemented!()
|
||||
}
|
||||
}
|
||||
|
||||
impl IndexMut<u32> for H {
|
||||
fn index_mut(&mut self, index: u32) -> &mut S {
|
||||
unimplemented!()
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
H["?"].f(); //~ ERROR mismatched types
|
||||
}
|
||||
26
src/test/compile-fail/regions-adjusted-lvalue-op.rs
Normal file
26
src/test/compile-fail/regions-adjusted-lvalue-op.rs
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
// check that we link regions in mutable lvalue ops correctly - issue #41774
|
||||
|
||||
struct Data(i32);
|
||||
|
||||
trait OhNo {
|
||||
fn oh_no(&mut self, other: &Vec<Data>) { loop {} }
|
||||
}
|
||||
|
||||
impl OhNo for Data {}
|
||||
impl OhNo for [Data] {}
|
||||
|
||||
fn main() {
|
||||
let mut v = vec![Data(0)];
|
||||
v[0].oh_no(&v); //~ ERROR cannot borrow `v` as immutable because
|
||||
(*v).oh_no(&v); //~ ERROR cannot borrow `v` as immutable because
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue