Skip to content

Commit

Permalink
Unrolled build for rust-lang#122988
Browse files Browse the repository at this point in the history
Rollup merge of rust-lang#122988 - matthiaskrgr:icetests, r=petrochenkov

add even more tests!

Fixes rust-lang#109869
Fixes rust-lang#110453
Fixes rust-lang#109020
Fixes rust-lang#108580
Fixes rust-lang#108220
Fixes rust-lang#113045
Fixes rust-lang#113133
Fixes rust-lang#114464
Fixes rust-lang#116599
Fixes rust-lang#119731
  • Loading branch information
rust-timer authored Mar 25, 2024
2 parents cb7c636 + e4d816e commit 53d9d9a
Show file tree
Hide file tree
Showing 23 changed files with 526 additions and 0 deletions.
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

0 comments on commit 53d9d9a

Please sign in to comment.