Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add even more tests! #122988

Merged
merged 10 commits into from
Mar 25, 2024
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
// ICE cannot convert Refree.. to a region vid
// issue: rust-lang/rust#114464

#![feature(generic_const_exprs)]
#![allow(incomplete_features)]

fn test<const N: usize>() {}

fn wow<'a>() {
test::<{
let _: &'a ();
//~^ ERROR cannot capture late-bound lifetime in constant
3
}>();
}

fn main() {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
error: cannot capture late-bound lifetime in constant
--> $DIR/convert-refree-region-vid-ice-114464.rs:11:17
|
LL | fn wow<'a>() {
| -- lifetime defined here
LL | test::<{
LL | let _: &'a ();
| ^^

error: aborting due to 1 previous error

Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
// ICE no entry found for key generics_of
// issue: rust-lang/rust#113133

#![allow(incomplete_features)]
#![feature(generic_const_exprs, non_lifetime_binders)]

pub fn foo()
where
for<const N: usize = { const fn bar() {} bar(); 1 }> ():,
//~^ ERROR defaults for generic parameters are not allowed in `for<...>` binders
{}

fn main() {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
error: defaults for generic parameters are not allowed in `for<...>` binders
--> $DIR/no-entry-found-for-key-ice-gce-nlb-113133.rs:9:9
|
LL | for<const N: usize = { const fn bar() {} bar(); 1 }> ():,
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

error: aborting due to 1 previous error

Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
// rust-lang/rust#119731
// ICE ... unevaluated constant UnevaluatedConst

#![feature(generic_const_exprs)]
#![allow(incomplete_features)]

mod v20 {
const v4: usize = 512;
pub type v11 = [[usize; v4]; v4];
//~^ WARN type `v11` should have an upper camel case name
const v2: v11 = [[256; v4]; v4];

const v0: [[usize; v4]; v4] = v6(v8);
//~^ ERROR cannot find value `v8` in this scope
//~| ERROR cannot find function `v6` in this scope
pub struct v17<const v10: usize, const v7: v11> {
//~^ WARN type `v17` should have an upper camel case name
//~| ERROR `[[usize; v4]; v4]` is forbidden as the type of a const generic parameter
_p: (),
}

impl v17<512, v0> {
pub const fn v21() -> v18 {}
//~^ ERROR cannot find type `v18` in this scope
}

impl<const v10: usize> v17<v10, v2> {
//~^ ERROR maximum number of nodes exceeded in constant v20::v17::<v10, v2>::{constant#1}
//~| ERROR maximum number of nodes exceeded in constant v20::v17::<v10, v2>::{constant#1}
pub const fn v21() -> v18 {
//~^ ERROR cannot find type `v18` in this scope
v18 { _p: () }
//~^ ERROR cannot find struct, variant or union type `v18` in this scope
}
}
}
pub use v20::{v13, v17};
//~^ ERROR unresolved import `v20::v13`
fn main() {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
error[E0432]: unresolved import `v20::v13`
--> $DIR/unevaluated-const-ice-119731.rs:37:15
|
LL | pub use v20::{v13, v17};
| ^^^
| |
| no `v13` in `v20`
| help: a similar name exists in the module: `v11`

error[E0425]: cannot find value `v8` in this scope
--> $DIR/unevaluated-const-ice-119731.rs:13:38
|
LL | const v0: [[usize; v4]; v4] = v6(v8);
| ^^ not found in this scope

error[E0412]: cannot find type `v18` in this scope
--> $DIR/unevaluated-const-ice-119731.rs:23:31
|
LL | pub type v11 = [[usize; v4]; v4];
| --------------------------------- similarly named type alias `v11` defined here
...
LL | pub const fn v21() -> v18 {}
| ^^^ help: a type alias with a similar name exists: `v11`

error[E0412]: cannot find type `v18` in this scope
--> $DIR/unevaluated-const-ice-119731.rs:30:31
|
LL | pub type v11 = [[usize; v4]; v4];
| --------------------------------- similarly named type alias `v11` defined here
...
LL | pub const fn v21() -> v18 {
| ^^^ help: a type alias with a similar name exists: `v11`

error[E0422]: cannot find struct, variant or union type `v18` in this scope
--> $DIR/unevaluated-const-ice-119731.rs:32:13
|
LL | pub type v11 = [[usize; v4]; v4];
| --------------------------------- similarly named type alias `v11` defined here
...
LL | v18 { _p: () }
| ^^^ help: a type alias with a similar name exists: `v11`

warning: type `v11` should have an upper camel case name
--> $DIR/unevaluated-const-ice-119731.rs:9:14
|
LL | pub type v11 = [[usize; v4]; v4];
| ^^^ help: convert the identifier to upper camel case (notice the capitalization): `V11`
|
= note: `#[warn(non_camel_case_types)]` on by default

warning: type `v17` should have an upper camel case name
--> $DIR/unevaluated-const-ice-119731.rs:16:16
|
LL | pub struct v17<const v10: usize, const v7: v11> {
| ^^^ help: convert the identifier to upper camel case (notice the capitalization): `V17`

error[E0425]: cannot find function `v6` in this scope
--> $DIR/unevaluated-const-ice-119731.rs:13:35
|
LL | const v0: [[usize; v4]; v4] = v6(v8);
| ^^ not found in this scope

error: `[[usize; v4]; v4]` is forbidden as the type of a const generic parameter
--> $DIR/unevaluated-const-ice-119731.rs:16:48
|
LL | pub struct v17<const v10: usize, const v7: v11> {
| ^^^
|
= note: the only supported types are integers, `bool` and `char`
help: add `#![feature(adt_const_params)]` to the crate attributes to enable more complex and user defined types
|
LL + #![feature(adt_const_params)]
|

error: maximum number of nodes exceeded in constant v20::v17::<v10, v2>::{constant#1}
--> $DIR/unevaluated-const-ice-119731.rs:27:37
|
LL | impl<const v10: usize> v17<v10, v2> {
| ^^

error: maximum number of nodes exceeded in constant v20::v17::<v10, v2>::{constant#1}
--> $DIR/unevaluated-const-ice-119731.rs:27:37
|
LL | impl<const v10: usize> v17<v10, v2> {
| ^^
|
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`

error: aborting due to 9 previous errors; 2 warnings emitted

Some errors have detailed explanations: E0412, E0422, E0425, E0432.
For more information about an error, try `rustc --explain E0412`.
35 changes: 35 additions & 0 deletions tests/ui/generic-const-items/assoc-const-AnonConst-ice-108220.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
// ICE assertion failed: matches!(self.def_kind(ct.def.did), DefKind :: AnonConst)
// issue: rust-lang/rust#108220
//@ check-pass

#![feature(associated_const_equality)]
#![allow(unused)]

use std::marker::PhantomData;

pub struct NoPin;

pub trait SetAlternate<const A: u8> {}

impl SetAlternate<0> for NoPin {}

pub trait PinA<PER> {
const A: u8;
}

impl<PER> PinA<PER> for NoPin {
const A: u8 = 0;
}

pub trait Pins<USART> {}

impl<USART, T, const TA: u8> Pins<USART> for T where
T: PinA<USART, A = { TA }> + SetAlternate<TA>
{
}

struct Serial<USART>(PhantomData<USART>);

impl<USART> Serial<USART> where NoPin: Pins<USART> {}

fn main() {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
// ICE expected ReFree to map to ReEarlyBound
// issue: rust-lang/rust#108580
//@ check-pass

trait Foo {
fn bar(&self) -> impl Iterator<Item = impl Sized> + '_;
}

impl Foo for () {
fn bar(&self) -> impl Iterator + '_ {
//~^ WARN impl trait in impl method signature does not match trait method signature
vec![()].into_iter()
}
}

pub fn main() {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
warning: impl trait in impl method signature does not match trait method signature
--> $DIR/expeced-refree-to-map-to-reearlybound-ice-108580.rs:10:22
|
LL | fn bar(&self) -> impl Iterator<Item = impl Sized> + '_;
| ------------------------------------- return type from trait method defined here
...
LL | fn bar(&self) -> impl Iterator + '_ {
| ^^^^^^^^^^^^^^^^^^
|
= note: add `#[allow(refining_impl_trait)]` if it is intended for this to be part of the public API of this crate
= note: we are soliciting feedback, see issue #121718 <https://github.com/rust-lang/rust/issues/121718> for more information
= note: `#[warn(refining_impl_trait_internal)]` on by default
help: replace the return type so that it matches the trait
|
LL | fn bar(&self) -> impl Iterator<Item = impl Sized> + '_ {
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

warning: 1 warning emitted

18 changes: 18 additions & 0 deletions tests/ui/mir/mir-build-2021-closure-capture-ice-110453-1.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
// ICE in mir building with captured value of unresolved type
// None in compiler/rustc_mir_build/src/build/expr/as_place.rs
// issue: rust-lang/rust#110453
//@ edition:2021

#![crate_type="lib"]

pub struct B;
pub fn a() -> B { B }

mod handlers {
pub struct C(B);
//~^ ERROR cannot find type `B` in this scope
pub fn c() -> impl Fn() -> C {
let a1 = ();
|| C((crate::a(), a1).into())
}
}
14 changes: 14 additions & 0 deletions tests/ui/mir/mir-build-2021-closure-capture-ice-110453-1.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
error[E0412]: cannot find type `B` in this scope
--> $DIR/mir-build-2021-closure-capture-ice-110453-1.rs:12:18
|
LL | pub struct C(B);
| ^ not found in this scope
|
help: consider importing this struct
|
LL + use crate::B;
|

error: aborting due to 1 previous error

For more information about this error, try `rustc --explain E0412`.
11 changes: 11 additions & 0 deletions tests/ui/mir/mir-build-2021-closure-capture-ice-110453-2.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
// ICE in mir building with captured value of unresolved type
// None in compiler/rustc_mir_build/src/build/expr/as_place.rs
// issue: rust-lang/rust#110453
//@ edition:2021

#![crate_type="lib"]

pub fn dup(f: impl Fn(i32) -> i32) -> impl Fn(as_str) -> i32 {
//~^ ERROR cannot find type `as_str` in this scope
move |a| f(a * 2)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
error[E0412]: cannot find type `as_str` in this scope
--> $DIR/mir-build-2021-closure-capture-ice-110453-2.rs:8:47
|
LL | pub fn dup(f: impl Fn(i32) -> i32) -> impl Fn(as_str) -> i32 {
| ^^^^^^ not found in this scope

error: aborting due to 1 previous error

For more information about this error, try `rustc --explain E0412`.
44 changes: 44 additions & 0 deletions tests/ui/nll/unexpected-inference-var-ice-116599.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
// ICE unexpected inference var
// issue: rust-lang/rust#116599
//@ check-pass

pub trait EvaluateConstMethods {
type Trait: TraitWithConstMethods;

/// **This block breaks**
const DATA_3: Data3 = {
<<<Self::Trait as TraitWithConstMethods>::Method2 as ConstFn<_, _>>::Body<
<<Self::Trait as TraitWithConstMethods>::Method1 as ConstFn<_, _>>::Body<ContainsData1>,
> as Contains<_>>::ITEM
};
}

pub trait TraitWithConstMethods {
/// "const trait method" of signature `fn(Data1) -> Data2`
type Method1: ConstFn<Data1, Data2>;

/// "const trait method" of signature `fn(Data2) -> Data3`
type Method2: ConstFn<Data2, Data3>;
}

/// A trait which tries to implement const methods in traits
pub trait ConstFn<Arg, Ret> {
type Body<T: Contains<Arg>>: Contains<Ret>;
}

/// A ZST which represents / "contains" a const value which can be pass to a [`ConstFn`]
pub trait Contains<T> {
const ITEM: T;
}

pub struct ContainsData1;
impl Contains<Data1> for ContainsData1 {
const ITEM: Data1 = Data1 {};
}

// Arbitrary data
pub struct Data1 {}
pub struct Data2 {}
pub struct Data3 {}

pub fn main() {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
// ICE min_specialization:
// Ok(['?0, Const { ty: usize, kind: Leaf(0x0000000000000000) }]) is not fully resolved
// issue: rust-lang/rust#113045

#![feature(min_specialization)]

trait X {}

impl<'a, const N: usize> X for [(); N] {}

impl<'a, Unconstrained> X for [(); 0] {}
//~^ ERROR the type parameter `Unconstrained` is not constrained by the impl trait, self type, or predicates
//~| ERROR specialization impl does not specialize any associated items

fn main() {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
error[E0207]: the type parameter `Unconstrained` is not constrained by the impl trait, self type, or predicates
--> $DIR/ice-const-not-fully-resolved-113045.rs:11:10
|
LL | impl<'a, Unconstrained> X for [(); 0] {}
| ^^^^^^^^^^^^^ unconstrained type parameter

error: specialization impl does not specialize any associated items
--> $DIR/ice-const-not-fully-resolved-113045.rs:11:1
|
LL | impl<'a, Unconstrained> X for [(); 0] {}
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
note: impl is a specialization of this impl
--> $DIR/ice-const-not-fully-resolved-113045.rs:9:1
|
LL | impl<'a, const N: usize> X for [(); N] {}
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

error: aborting due to 2 previous errors

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