mirror of
https://github.com/rust-lang/rust
synced 2024-09-30 22:04:36 +00:00
Rollup merge of #125807 - oli-obk:resolve_const_types, r=compiler-errors
Also resolve the type of constants, even if we already turned it into an error constant error constants can still have arbitrary types, and in this case it was turned into an error constant because there was an infer var in the *type* not the *const*. fixes #125760
This commit is contained in:
commit
619b3e8d4e
|
@ -865,6 +865,7 @@ fn fold_const(&mut self, ct: ty::Const<'tcx>) -> ty::Const<'tcx> {
|
|||
self.handle_term(ct, ty::Const::outer_exclusive_binder, |tcx, guar| {
|
||||
ty::Const::new_error(tcx, guar, ct.ty())
|
||||
})
|
||||
.super_fold_with(self)
|
||||
}
|
||||
|
||||
fn fold_predicate(&mut self, predicate: ty::Predicate<'tcx>) -> ty::Predicate<'tcx> {
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
error: `Bar` is forbidden as the type of a const generic parameter
|
||||
--> $DIR/const_generic_type.rs:7:24
|
||||
|
|
||||
LL | async fn test<const N: crate::Bar>() {
|
||||
| ^^^^^^^^^^
|
||||
|
|
||||
= note: the only supported types are integers, `bool` and `char`
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
error[E0283]: type annotations needed
|
||||
--> $DIR/const_generic_type.rs:7:1
|
||||
|
|
||||
LL | async fn test<const N: crate::Bar>() {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ cannot infer type
|
||||
|
|
||||
= note: cannot satisfy `_: std::fmt::Display`
|
||||
|
||||
error: `Bar` is forbidden as the type of a const generic parameter
|
||||
--> $DIR/const_generic_type.rs:7:24
|
||||
|
|
||||
LL | async fn test<const N: crate::Bar>() {
|
||||
| ^^^^^^^^^^
|
||||
|
|
||||
= note: the only supported types are integers, `bool` and `char`
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0283`.
|
14
tests/ui/type-alias-impl-trait/const_generic_type.rs
Normal file
14
tests/ui/type-alias-impl-trait/const_generic_type.rs
Normal file
|
@ -0,0 +1,14 @@
|
|||
//@edition: 2021
|
||||
//@revisions: infer no_infer
|
||||
|
||||
#![feature(type_alias_impl_trait)]
|
||||
type Bar = impl std::fmt::Display;
|
||||
|
||||
async fn test<const N: crate::Bar>() {
|
||||
//[no_infer]~^ ERROR: type annotations needed
|
||||
//~^^ ERROR: `Bar` is forbidden as the type of a const generic parameter
|
||||
#[cfg(infer)]
|
||||
let x: u32 = N;
|
||||
}
|
||||
|
||||
fn main() {}
|
Loading…
Reference in a new issue