Skip to content

Commit

Permalink
Rollup merge of rust-lang#92312 - BGR360:needs-test, r=Mark-Simulacrum
Browse files Browse the repository at this point in the history
Add tests for three old ICEs

Closes rust-lang#84044
Closes rust-lang#91594
Closes rust-lang#89066
  • Loading branch information
matthiaskrgr committed Jan 29, 2022
2 parents abac45a + 3f849a8 commit ee9307d
Show file tree
Hide file tree
Showing 6 changed files with 118 additions and 0 deletions.
6 changes: 6 additions & 0 deletions src/test/ui/closures/issue-84044-drop-non-mut.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
// #84044: This used to ICE.

fn main() {
let f = || {};
drop(&mut f); //~ ERROR cannot borrow `f` as mutable, as it is not declared as mutable
}
11 changes: 11 additions & 0 deletions src/test/ui/closures/issue-84044-drop-non-mut.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
error[E0596]: cannot borrow `f` as mutable, as it is not declared as mutable
--> $DIR/issue-84044-drop-non-mut.rs:5:10
|
LL | let f = || {};
| - help: consider changing this to be mutable: `mut f`
LL | drop(&mut f);
| ^^^^^^ cannot borrow as mutable

error: aborting due to previous error

For more information about this error, try `rustc --explain E0596`.
28 changes: 28 additions & 0 deletions src/test/ui/save-analysis/issue-89066.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
// compile-flags: -Zsave-analysis

// Check that this does not ICE.
// Stolen from src/test/ui/const-generics/generic_arg_infer/infer-arg-test.rs

#![feature(generic_arg_infer)]

struct All<'a, T, const N: usize> {
v: &'a T,
}

struct BadInfer<_>;
//~^ ERROR expected identifier
//~| ERROR parameter `_` is never used

fn all_fn<'a, T, const N: usize>() {}

fn bad_infer_fn<_>() {}
//~^ ERROR expected identifier


fn main() {
let a: All<_, _, _>;
//~^ ERROR this struct takes 2 generic arguments but 3 generic arguments were supplied
all_fn();
let v: [u8; _];
let v: [u8; 10] = [0; _];
}
39 changes: 39 additions & 0 deletions src/test/ui/save-analysis/issue-89066.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
error: expected identifier, found reserved identifier `_`
--> $DIR/issue-89066.rs:12:17
|
LL | struct BadInfer<_>;
| ^ expected identifier, found reserved identifier

error: expected identifier, found reserved identifier `_`
--> $DIR/issue-89066.rs:18:17
|
LL | fn bad_infer_fn<_>() {}
| ^ expected identifier, found reserved identifier

error[E0392]: parameter `_` is never used
--> $DIR/issue-89066.rs:12:17
|
LL | struct BadInfer<_>;
| ^ unused parameter
|
= help: consider removing `_`, referring to it in a field, or using a marker such as `PhantomData`
= help: if you intended `_` to be a const parameter, use `const _: usize` instead

error[E0107]: this struct takes 2 generic arguments but 3 generic arguments were supplied
--> $DIR/issue-89066.rs:23:10
|
LL | let a: All<_, _, _>;
| ^^^ - help: remove this generic argument
| |
| expected 2 generic arguments
|
note: struct defined here, with 2 generic parameters: `T`, `N`
--> $DIR/issue-89066.rs:8:8
|
LL | struct All<'a, T, const N: usize> {
| ^^^ - -

error: aborting due to 4 previous errors

Some errors have detailed explanations: E0107, E0392.
For more information about an error, try `rustc --explain E0107`.
17 changes: 17 additions & 0 deletions src/test/ui/traits/issue-91594.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
// #91594: This used to ICE.

trait Component<M> {
type Interface;
}
trait HasComponent<I> {}

struct Foo;

impl HasComponent<<Foo as Component<Foo>>::Interface> for Foo {}
//~^ ERROR the trait bound `Foo: HasComponent<()>` is not satisfied

impl<M: HasComponent<()>> Component<M> for Foo {
type Interface = u8;
}

fn main() {}
17 changes: 17 additions & 0 deletions src/test/ui/traits/issue-91594.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
error[E0277]: the trait bound `Foo: HasComponent<()>` is not satisfied
--> $DIR/issue-91594.rs:10:6
|
LL | impl HasComponent<<Foo as Component<Foo>>::Interface> for Foo {}
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `HasComponent<()>` is not implemented for `Foo`
|
= help: the following implementations were found:
<Foo as HasComponent<<Foo as Component<Foo>>::Interface>>
note: required because of the requirements on the impl of `Component<Foo>` for `Foo`
--> $DIR/issue-91594.rs:13:27
|
LL | impl<M: HasComponent<()>> Component<M> for Foo {
| ^^^^^^^^^^^^ ^^^

error: aborting due to previous error

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

0 comments on commit ee9307d

Please sign in to comment.