Skip to content

Commit

Permalink
Rollup merge of rust-lang#63397 - JohnTitor:add-tests-for-ices, r=Cen…
Browse files Browse the repository at this point in the history
…tril

Add tests for some ICEs

Closes rust-lang#43623
Closes rust-lang#44405

r? @Centril
  • Loading branch information
Centril committed Aug 9, 2019
2 parents b91c46b + 55f15d7 commit 71648fb
Show file tree
Hide file tree
Showing 4 changed files with 94 additions and 0 deletions.
19 changes: 19 additions & 0 deletions src/test/ui/issues/issue-43623.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
pub trait Trait<'a> {
type Assoc;
}

pub struct Type;

impl<'a> Trait<'a> for Type {
type Assoc = ();
}

pub fn break_me<T, F>(f: F)
where T: for<'b> Trait<'b>,
F: for<'b> FnMut(<T as Trait<'b>>::Assoc) {
break_me::<Type, fn(_)>;
//~^ ERROR: type mismatch in function arguments
//~| ERROR: type mismatch resolving
}

fn main() {}
42 changes: 42 additions & 0 deletions src/test/ui/issues/issue-43623.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
error[E0631]: type mismatch in function arguments
--> $DIR/issue-43623.rs:14:5
|
LL | break_me::<Type, fn(_)>;
| ^^^^^^^^^^^^^^^^^^^^^^^
| |
| expected signature of `for<'b> fn(<Type as Trait<'b>>::Assoc) -> _`
| found signature of `fn(_) -> _`
|
note: required by `break_me`
--> $DIR/issue-43623.rs:11:1
|
LL | / pub fn break_me<T, F>(f: F)
LL | | where T: for<'b> Trait<'b>,
LL | | F: for<'b> FnMut(<T as Trait<'b>>::Assoc) {
LL | | break_me::<Type, fn(_)>;
LL | |
LL | |
LL | | }
| |_^

error[E0271]: type mismatch resolving `for<'b> <fn(_) as std::ops::FnOnce<(<Type as Trait<'b>>::Assoc,)>>::Output == ()`
--> $DIR/issue-43623.rs:14:5
|
LL | break_me::<Type, fn(_)>;
| ^^^^^^^^^^^^^^^^^^^^^^^ expected bound lifetime parameter 'b, found concrete lifetime
|
note: required by `break_me`
--> $DIR/issue-43623.rs:11:1
|
LL | / pub fn break_me<T, F>(f: F)
LL | | where T: for<'b> Trait<'b>,
LL | | F: for<'b> FnMut(<T as Trait<'b>>::Assoc) {
LL | | break_me::<Type, fn(_)>;
LL | |
LL | |
LL | | }
| |_^

error: aborting due to 2 previous errors

For more information about this error, try `rustc --explain E0271`.
22 changes: 22 additions & 0 deletions src/test/ui/issues/issue-44405.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
use std::ops::Index;

struct Test;
struct Container(Test);

impl Test {
fn test(&mut self) {}
}

impl<'a> Index<&'a bool> for Container {
type Output = Test;

fn index(&self, _index: &'a bool) -> &Test {
&self.0
}
}

fn main() {
let container = Container(Test);
let mut val = true;
container[&mut val].test(); //~ ERROR: cannot borrow data
}
11 changes: 11 additions & 0 deletions src/test/ui/issues/issue-44405.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
error[E0596]: cannot borrow data in an index of `Container` as mutable
--> $DIR/issue-44405.rs:21:5
|
LL | container[&mut val].test();
| ^^^^^^^^^^^^^^^^^^^ cannot borrow as mutable
|
= help: trait `IndexMut` is required to modify indexed content, but it is not implemented for `Container`

error: aborting due to previous error

For more information about this error, try `rustc --explain E0596`.

0 comments on commit 71648fb

Please sign in to comment.