Skip to content

Commit

Permalink
add some more testcases
Browse files Browse the repository at this point in the history
  • Loading branch information
hellow554 committed Oct 12, 2021
1 parent 86d6d2b commit 0767ed3
Show file tree
Hide file tree
Showing 7 changed files with 188 additions and 0 deletions.
21 changes: 21 additions & 0 deletions src/test/ui/consts/issue-88071.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
// check-pass
//
// regression test for #88071

#![feature(const_btree_new)]
#![feature(const_fn_trait_bound)]

use std::collections::BTreeMap;

pub struct CustomMap<K, V>(BTreeMap<K, V>);

impl<K, V> CustomMap<K, V>
where
K: Ord,
{
pub const fn new() -> Self {
CustomMap(BTreeMap::new())
}
}

fn main() {}
22 changes: 22 additions & 0 deletions src/test/ui/generic-associated-types/issue-87750.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#![feature(generic_associated_types)]

trait PointerFamily {
type Pointer<T>;
}

struct Rc<T>(Box<T>);
struct RcFamily;

impl PointerFamily for RcFamily {
type Pointer<T> = Rc<T>;
}

#[allow(dead_code)]
enum Node<T, P: PointerFamily> where P::Pointer<Node<T, P>>: Sized {
Cons(P::Pointer<Node<T, P>>),
}

fn main() {
let _list: <RcFamily as PointerFamily>::Pointer<Node<i32, RcFamily>>;
//~^ ERROR overflow evaluating the requirement `Node<i32, RcFamily>: Sized`
}
9 changes: 9 additions & 0 deletions src/test/ui/generic-associated-types/issue-87750.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
error[E0275]: overflow evaluating the requirement `Node<i32, RcFamily>: Sized`
--> $DIR/issue-87750.rs:20:16
|
LL | let _list: <RcFamily as PointerFamily>::Pointer<Node<i32, RcFamily>>;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

error: aborting due to previous error

For more information about this error, try `rustc --explain E0275`.
57 changes: 57 additions & 0 deletions src/test/ui/traits/issue-52893.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
// check-fail
//
// regression test for issue 52893
trait At<Name> {
type AtRes;
fn at(self) -> Self::AtRes;
}

trait Push<T> {
type PushRes;
fn push(self, other: T) -> Self::PushRes;
}

trait AddClass<Name, F> {
type AddRes;
fn init(self, func: F);
}

trait ToRef {
type RefRes;
fn to_ref(&self) -> Self::RefRes;
}

struct Class<P>(P);

impl<P> Class<P> {
fn with<Name, F>(self) -> <Self as AddClass<Name, F>>::AddRes
where
Self: AddClass<Name, F>,
{
todo!()
}

fn from<F>(self) -> <Self as AddClass<P, F>>::AddRes
where
Self: AddClass<P, F>,
{
todo!()
}
}

impl<F, Name, P> AddClass<Name, F> for Class<P>
where
Self: At<Name>,
<Self as At<Name>>::AtRes: Push<F>,
<<Self as At<Name>>::AtRes as Push<F>>::PushRes: ToRef<RefRes = Self> + Push<F>,
{
type AddRes = ();

fn init(self, func: F) {
let builder = self.at().push(func);
let output = builder.to_ref();
builder.push(output); //~ ERROR mismatched types [E0308]
}
}

fn main() {}
15 changes: 15 additions & 0 deletions src/test/ui/traits/issue-52893.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
error[E0308]: mismatched types
--> $DIR/issue-52893.rs:53:22
|
LL | impl<F, Name, P> AddClass<Name, F> for Class<P>
| - this type parameter
...
LL | builder.push(output);
| ^^^^^^ expected type parameter `F`, found struct `Class`
|
= note: expected type parameter `F`
found struct `Class<P>`

error: aborting due to previous error

For more information about this error, try `rustc --explain E0308`.
47 changes: 47 additions & 0 deletions src/test/ui/traits/issue-68295.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
// check-fail
//
// regression test for #68295

struct Matrix<R, C, S>(R, C, S);

impl<R, C, S> Matrix<R, C, S> {
fn into_owned(self) -> Matrix<R, C, Owned<R, C, ()>>
where
(): Allocator<R, C>,
{
unimplemented!()
}
}

impl<D, S> Matrix<D, D, S> {
fn hermitian_part(&self) -> Matrix<D, D, Owned<D, D, ()>>
where
(): Allocator<D, D>,
{
unimplemented!()
}
}

trait Allocator<R, C> {
type Buffer;
}

trait Trait<R, C, A> {
type Power;
}

impl<R, C, A: Allocator<R, C>> Trait<R, C, A> for () {
type Power = A::Buffer;
}

type Owned<R, C, G> = <G as Trait<R, C, ()>>::Power;

fn crash<R, C>(input: Matrix<R, C, ()>) -> Matrix<R, C, u32>
where
(): Allocator<R, C>,
{
input.into_owned()
//~^ ERROR mismatched types [E0308]
}

fn main() {}
17 changes: 17 additions & 0 deletions src/test/ui/traits/issue-68295.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
error[E0308]: mismatched types
--> $DIR/issue-68295.rs:43:5
|
LL | fn crash<R, C>(input: Matrix<R, C, ()>) -> Matrix<R, C, u32>
| ----------------- expected `Matrix<R, C, u32>` because of return type
...
LL | input.into_owned()
| ^^^^^^^^^^^^^^^^^^ expected `u32`, found associated type
|
= note: expected struct `Matrix<_, _, u32>`
found struct `Matrix<_, _, <() as Allocator<R, C>>::Buffer>`
= help: consider constraining the associated type `<() as Allocator<R, C>>::Buffer` to `u32`
= note: for more information, visit https://doc.rust-lang.org/book/ch19-03-advanced-traits.html

error: aborting due to previous error

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

0 comments on commit 0767ed3

Please sign in to comment.