Don't ICE when we cannot eval a const to a valtree in the new solver
This commit is contained in:
parent
cc8d9b6927
commit
b58f5a7800
3 changed files with 13 additions and 5 deletions
|
@ -1052,12 +1052,12 @@ impl<'tcx> EvalCtxt<'_, 'tcx> {
|
||||||
ty: Ty<'tcx>,
|
ty: Ty<'tcx>,
|
||||||
) -> Option<ty::Const<'tcx>> {
|
) -> Option<ty::Const<'tcx>> {
|
||||||
use rustc_middle::mir::interpret::ErrorHandled;
|
use rustc_middle::mir::interpret::ErrorHandled;
|
||||||
match self.infcx.try_const_eval_resolve(param_env, unevaluated, ty, DUMMY_SP) {
|
match self.infcx.const_eval_resolve(param_env, unevaluated, DUMMY_SP) {
|
||||||
Ok(ct) => Some(ct),
|
Ok(Some(val)) => Some(ty::Const::new_value(self.tcx(), val, ty)),
|
||||||
|
Ok(None) | Err(ErrorHandled::TooGeneric(_)) => None,
|
||||||
Err(ErrorHandled::Reported(e, _)) => {
|
Err(ErrorHandled::Reported(e, _)) => {
|
||||||
Some(ty::Const::new_error(self.tcx(), e.into(), ty))
|
Some(ty::Const::new_error(self.tcx(), e.into(), ty))
|
||||||
}
|
}
|
||||||
Err(ErrorHandled::TooGeneric(_)) => None,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
//@ compile-flags: -Znext-solver=coherence
|
//@ compile-flags: -Znext-solver
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
struct X<const FN: fn() = { || {} }>;
|
struct X<const FN: fn() = { || {} }>;
|
||||||
//~^ ERROR using function pointers as const generic parameters is forbidden
|
//~^ ERROR using function pointers as const generic parameters is forbidden
|
||||||
//~| ERROR using function pointers as const generic parameters is forbidden
|
//~| ERROR using function pointers as const generic parameters is forbidden
|
||||||
|
//~| ERROR type annotations needed
|
||||||
|
|
||||||
fn main() {}
|
fn main() {}
|
||||||
|
|
|
@ -1,3 +1,9 @@
|
||||||
|
error[E0282]: type annotations needed
|
||||||
|
--> $DIR/const-region-infer-to-static-in-binder.rs:4:10
|
||||||
|
|
|
||||||
|
LL | struct X<const FN: fn() = { || {} }>;
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ cannot infer the value of the constant `{ || {} }`
|
||||||
|
|
||||||
error: using function pointers as const generic parameters is forbidden
|
error: using function pointers as const generic parameters is forbidden
|
||||||
--> $DIR/const-region-infer-to-static-in-binder.rs:4:20
|
--> $DIR/const-region-infer-to-static-in-binder.rs:4:20
|
||||||
|
|
|
|
||||||
|
@ -15,5 +21,6 @@ LL | struct X<const FN: fn() = { || {} }>;
|
||||||
= note: the only supported types are integers, `bool` and `char`
|
= note: the only supported types are integers, `bool` and `char`
|
||||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||||
|
|
||||||
error: aborting due to 2 previous errors
|
error: aborting due to 3 previous errors
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0282`.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue