mirror of
https://github.com/rust-lang/rust.git
synced 2025-02-06 12:04:36 +00:00
Do not fail evaluation in const blocks
This commit is contained in:
parent
22e491ac7e
commit
b9a3c32f31
@ -1226,7 +1226,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
||||
let body = self.tcx.hir().body(anon_const.body);
|
||||
|
||||
// Create a new function context.
|
||||
let fcx = FnCtxt::new(self, self.param_env, body.value.hir_id);
|
||||
let fcx = FnCtxt::new(self, self.param_env.with_const(), body.value.hir_id);
|
||||
crate::check::GatherLocalsVisitor::new(&fcx).visit_body(body);
|
||||
|
||||
let ty = fcx.check_expr_with_expectation(&body.value, expected);
|
||||
|
17
src/test/ui/consts/const-block-const-bound.rs
Normal file
17
src/test/ui/consts/const-block-const-bound.rs
Normal file
@ -0,0 +1,17 @@
|
||||
#![allow(unused)]
|
||||
#![feature(const_fn_trait_bound, const_trait_impl, inline_const)]
|
||||
|
||||
const fn f<T: ~const Drop>(x: T) {}
|
||||
|
||||
struct UnconstDrop;
|
||||
|
||||
impl Drop for UnconstDrop {
|
||||
fn drop(&mut self) {}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
const {
|
||||
f(UnconstDrop);
|
||||
//~^ ERROR the trait bound `UnconstDrop: Drop` is not satisfied
|
||||
}
|
||||
}
|
21
src/test/ui/consts/const-block-const-bound.stderr
Normal file
21
src/test/ui/consts/const-block-const-bound.stderr
Normal file
@ -0,0 +1,21 @@
|
||||
error[E0277]: the trait bound `UnconstDrop: Drop` is not satisfied
|
||||
--> $DIR/const-block-const-bound.rs:14:11
|
||||
|
|
||||
LL | f(UnconstDrop);
|
||||
| - ^^^^^^^^^^^ the trait `Drop` is not implemented for `UnconstDrop`
|
||||
| |
|
||||
| required by a bound introduced by this call
|
||||
|
|
||||
note: required by a bound in `f`
|
||||
--> $DIR/const-block-const-bound.rs:4:15
|
||||
|
|
||||
LL | const fn f<T: ~const Drop>(x: T) {}
|
||||
| ^^^^^^^^^^^ required by this bound in `f`
|
||||
help: consider introducing a `where` bound, but there might be an alternative better way to express this requirement
|
||||
|
|
||||
LL | fn main() where UnconstDrop: Drop {
|
||||
| +++++++++++++++++++++++
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0277`.
|
Loading…
Reference in New Issue
Block a user