Rollup merge of #89768 - hellow554:tests, r=Mark-Simulacrum
add some more testcases resolves #52893 resolves #68295 resolves #87750 resolves #88071 All these issues have been fixed according to glacier. Just adding a test so it can be closed. Can anybody tell me why the github keywords do not work? 🤔 Please edit this post if you can fix it.
This commit is contained in:
commit
0caa6164a3
21
src/test/ui/consts/issue-88071.rs
Normal file
21
src/test/ui/consts/issue-88071.rs
Normal file
@ -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
src/test/ui/generic-associated-types/issue-87750.rs
Normal file
22
src/test/ui/generic-associated-types/issue-87750.rs
Normal file
@ -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
src/test/ui/generic-associated-types/issue-87750.stderr
Normal file
9
src/test/ui/generic-associated-types/issue-87750.stderr
Normal file
@ -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
src/test/ui/traits/issue-52893.rs
Normal file
57
src/test/ui/traits/issue-52893.rs
Normal file
@ -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
src/test/ui/traits/issue-52893.stderr
Normal file
15
src/test/ui/traits/issue-52893.stderr
Normal file
@ -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
src/test/ui/traits/issue-68295.rs
Normal file
47
src/test/ui/traits/issue-68295.rs
Normal file
@ -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
src/test/ui/traits/issue-68295.stderr
Normal file
17
src/test/ui/traits/issue-68295.stderr
Normal file
@ -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`.
|
Loading…
x
Reference in New Issue
Block a user