mirror of
https://github.com/rust-lang/rust.git
synced 2025-02-03 02:23:20 +00:00
Rollup merge of #88146 - BoxyUwU:tests-cec-incr-comp, r=oli-obk
Add tests for some `feature(const_evaluatable_checked)` incr comp issues Closes #77650 Closes #79251 #79251 didn't seem to be ICEing anymore so added regression tests for that aswell r? `@oli-obk`
This commit is contained in:
commit
01b0a8dce7
@ -0,0 +1,15 @@
|
|||||||
|
// revisions: cfail
|
||||||
|
#![feature(const_generics, const_evaluatable_checked)]
|
||||||
|
#![allow(incomplete_features)]
|
||||||
|
// regression test for #77650
|
||||||
|
fn c<T, const N: std::num::NonZeroUsize>()
|
||||||
|
where
|
||||||
|
[T; N.get()]: Sized,
|
||||||
|
{
|
||||||
|
use std::convert::TryFrom;
|
||||||
|
<[T; N.get()]>::try_from(())
|
||||||
|
//~^ error: the trait bound
|
||||||
|
//~^^ error: mismatched types
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {}
|
@ -0,0 +1,35 @@
|
|||||||
|
error[E0277]: the trait bound `[T; _]: From<()>` is not satisfied
|
||||||
|
--> $DIR/hash-tyvid-regression-1.rs:9:5
|
||||||
|
|
|
||||||
|
LL | <[T; N.get()]>::try_from(())
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^ the trait `From<()>` is not implemented for `[T; _]`
|
||||||
|
|
|
||||||
|
= note: required because of the requirements on the impl of `Into<[T; _]>` for `()`
|
||||||
|
= note: required because of the requirements on the impl of `TryFrom<()>` for `[T; _]`
|
||||||
|
note: required by `try_from`
|
||||||
|
--> $SRC_DIR/core/src/convert/mod.rs:LL:COL
|
||||||
|
|
|
||||||
|
LL | fn try_from(value: T) -> Result<Self, Self::Error>;
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
error[E0308]: mismatched types
|
||||||
|
--> $DIR/hash-tyvid-regression-1.rs:9:5
|
||||||
|
|
|
||||||
|
LL | <[T; N.get()]>::try_from(())
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `()`, found enum `Result`
|
||||||
|
|
|
||||||
|
= note: expected unit type `()`
|
||||||
|
found enum `Result<[T; _], Infallible>`
|
||||||
|
help: consider using a semicolon here
|
||||||
|
|
|
||||||
|
LL | <[T; N.get()]>::try_from(());
|
||||||
|
| +
|
||||||
|
help: try adding a return type
|
||||||
|
|
|
||||||
|
LL | -> Result<[T; _], Infallible> where
|
||||||
|
| +++++++++++++++++++++++++++++
|
||||||
|
|
||||||
|
error: aborting due to 2 previous errors
|
||||||
|
|
||||||
|
Some errors have detailed explanations: E0277, E0308.
|
||||||
|
For more information about an error, try `rustc --explain E0277`.
|
@ -0,0 +1,18 @@
|
|||||||
|
// revisions: cfail
|
||||||
|
#![feature(const_generics, const_evaluatable_checked)]
|
||||||
|
#![allow(incomplete_features)]
|
||||||
|
// regression test for #77650
|
||||||
|
struct C<T, const N: core::num::NonZeroUsize>([T; N.get()])
|
||||||
|
where
|
||||||
|
[T; N.get()]: Sized;
|
||||||
|
impl<'a, const N: core::num::NonZeroUsize, A, B: PartialEq<A>> PartialEq<&'a [A]> for C<B, N>
|
||||||
|
where
|
||||||
|
[B; N.get()]: Sized,
|
||||||
|
{
|
||||||
|
fn eq(&self, other: &&'a [A]) -> bool {
|
||||||
|
self.0 == other
|
||||||
|
//~^ error: can't compare
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {}
|
@ -0,0 +1,11 @@
|
|||||||
|
error[E0277]: can't compare `[B; _]` with `&&[A]`
|
||||||
|
--> $DIR/hash-tyvid-regression-2.rs:12:16
|
||||||
|
|
|
||||||
|
LL | self.0 == other
|
||||||
|
| ^^ no implementation for `[B; _] == &&[A]`
|
||||||
|
|
|
||||||
|
= help: the trait `PartialEq<&&[A]>` is not implemented for `[B; _]`
|
||||||
|
|
||||||
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0277`.
|
@ -0,0 +1,26 @@
|
|||||||
|
// revisions: cfail
|
||||||
|
#![feature(const_generics, const_evaluatable_checked)]
|
||||||
|
#![allow(incomplete_features)]
|
||||||
|
// regression test for #79251
|
||||||
|
struct Node<const D: usize>
|
||||||
|
where
|
||||||
|
SmallVec<{ D * 2 }>: ,
|
||||||
|
{
|
||||||
|
keys: SmallVec<{ D * 2 }>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<const D: usize> Node<D>
|
||||||
|
where
|
||||||
|
SmallVec<{ D * 2 }>: ,
|
||||||
|
{
|
||||||
|
fn new() -> Self {
|
||||||
|
let mut node = Node::new();
|
||||||
|
node.keys.some_function();
|
||||||
|
//~^ error: no method named
|
||||||
|
node
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
struct SmallVec<const D: usize> {}
|
||||||
|
|
||||||
|
fn main() {}
|
@ -0,0 +1,12 @@
|
|||||||
|
error[E0599]: no method named `some_function` found for struct `SmallVec` in the current scope
|
||||||
|
--> $DIR/hash-tyvid-regression-3.rs:17:19
|
||||||
|
|
|
||||||
|
LL | node.keys.some_function();
|
||||||
|
| ^^^^^^^^^^^^^ method not found in `SmallVec<{ D * 2 }>`
|
||||||
|
...
|
||||||
|
LL | struct SmallVec<const D: usize> {}
|
||||||
|
| ------------------------------- method `some_function` not found for this
|
||||||
|
|
||||||
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0599`.
|
@ -0,0 +1,40 @@
|
|||||||
|
// revisions: cfail
|
||||||
|
#![feature(const_generics, const_evaluatable_checked)]
|
||||||
|
#![allow(incomplete_features)]
|
||||||
|
// regression test for #79251
|
||||||
|
#[derive(Debug)]
|
||||||
|
struct Node<K, const D: usize>
|
||||||
|
where
|
||||||
|
SmallVec<K, { D * 2 }>: ,
|
||||||
|
{
|
||||||
|
keys: SmallVec<K, { D * 2 }>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<K, const D: usize> Node<K, D>
|
||||||
|
where
|
||||||
|
SmallVec<K, { D * 2 }>: ,
|
||||||
|
{
|
||||||
|
fn new() -> Self {
|
||||||
|
panic!()
|
||||||
|
}
|
||||||
|
|
||||||
|
#[inline(never)]
|
||||||
|
fn split(&mut self, i: usize, k: K, right: bool) -> Node<K, D> {
|
||||||
|
let mut node = Node::new();
|
||||||
|
node.keys.push(k);
|
||||||
|
//~^ error: no method named
|
||||||
|
node
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
struct SmallVec<T, const D: usize> {
|
||||||
|
data: [T; D],
|
||||||
|
}
|
||||||
|
impl<T, const D: usize> SmallVec<T, D> {
|
||||||
|
fn new() -> Self {
|
||||||
|
panic!()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {}
|
@ -0,0 +1,12 @@
|
|||||||
|
error[E0599]: no method named `push` found for struct `SmallVec` in the current scope
|
||||||
|
--> $DIR/hash-tyvid-regression-4.rs:23:19
|
||||||
|
|
|
||||||
|
LL | node.keys.push(k);
|
||||||
|
| ^^^^ method not found in `SmallVec<_, { D * 2 }>`
|
||||||
|
...
|
||||||
|
LL | struct SmallVec<T, const D: usize> {
|
||||||
|
| ---------------------------------- method `push` not found for this
|
||||||
|
|
||||||
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0599`.
|
Loading…
Reference in New Issue
Block a user