1
Fork 0

Use a const ParamEnv when in default_method_body_is_const

This commit is contained in:
Deadbeef 2021-12-17 20:39:55 +08:00
parent 9b45f04414
commit a1f91aa410
No known key found for this signature in database
GPG key ID: 6D017A96D8E6C2F9
3 changed files with 43 additions and 1 deletions

View file

@ -3,7 +3,7 @@ use rustc_hir as hir;
use rustc_hir::def_id::{DefId, LocalDefId};
use rustc_middle::ty::subst::Subst;
use rustc_middle::ty::{self, Binder, Predicate, PredicateKind, ToPredicate, Ty, TyCtxt};
use rustc_span::Span;
use rustc_span::{sym, Span};
use rustc_trait_selection::traits;
fn sized_constraint_for_ty<'tcx>(
@ -285,6 +285,12 @@ fn param_env(tcx: TyCtxt<'_>, def_id: DefId) -> ty::ParamEnv<'_> {
let constness = match hir_id {
Some(hir_id) => match tcx.hir().get(hir_id) {
hir::Node::TraitItem(hir::TraitItem { kind: hir::TraitItemKind::Fn(..), .. })
if tcx.has_attr(def_id, sym::default_method_body_is_const) =>
{
hir::Constness::Const
}
hir::Node::Item(hir::Item { kind: hir::ItemKind::Const(..), .. })
| hir::Node::Item(hir::Item { kind: hir::ItemKind::Static(..), .. })
| hir::Node::TraitItem(hir::TraitItem {