changes from review
This commit is contained in:
parent
c183110cc2
commit
8e92849cbb
@ -690,7 +690,11 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
|
|||||||
assert!(self.tcx.is_static(def_id));
|
assert!(self.tcx.is_static(def_id));
|
||||||
assert!(!self.tcx.is_thread_local_static(def_id));
|
assert!(!self.tcx.is_thread_local_static(def_id));
|
||||||
// Use size and align of the type.
|
// Use size and align of the type.
|
||||||
let ty = self.tcx.type_of(def_id).subst_identity();
|
let ty = self
|
||||||
|
.tcx
|
||||||
|
.type_of(def_id)
|
||||||
|
.no_bound_vars()
|
||||||
|
.expect("statics should not have generic parameters");
|
||||||
let layout = self.tcx.layout_of(ParamEnv::empty().and(ty)).unwrap();
|
let layout = self.tcx.layout_of(ParamEnv::empty().and(ty)).unwrap();
|
||||||
assert!(layout.is_sized());
|
assert!(layout.is_sized());
|
||||||
(layout.size, layout.align.abi, AllocKind::LiveData)
|
(layout.size, layout.align.abi, AllocKind::LiveData)
|
||||||
|
@ -450,7 +450,11 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o {
|
|||||||
.into()
|
.into()
|
||||||
}
|
}
|
||||||
(&GenericParamDefKind::Const { .. }, hir::GenericArg::Infer(inf)) => {
|
(&GenericParamDefKind::Const { .. }, hir::GenericArg::Infer(inf)) => {
|
||||||
let ty = tcx.at(self.span).type_of(param.def_id).subst_identity();
|
let ty = tcx
|
||||||
|
.at(self.span)
|
||||||
|
.type_of(param.def_id)
|
||||||
|
.no_bound_vars()
|
||||||
|
.expect("const parameter types cannot be generic");
|
||||||
if self.astconv.allow_ty_infer() {
|
if self.astconv.allow_ty_infer() {
|
||||||
self.astconv.ct_infer(ty, Some(param), inf.span).into()
|
self.astconv.ct_infer(ty, Some(param), inf.span).into()
|
||||||
} else {
|
} else {
|
||||||
@ -503,7 +507,11 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
GenericParamDefKind::Const { has_default } => {
|
GenericParamDefKind::Const { has_default } => {
|
||||||
let ty = tcx.at(self.span).type_of(param.def_id).subst_identity();
|
let ty = tcx
|
||||||
|
.at(self.span)
|
||||||
|
.type_of(param.def_id)
|
||||||
|
.no_bound_vars()
|
||||||
|
.expect("const parameter types cannot be generic");
|
||||||
if ty.references_error() {
|
if ty.references_error() {
|
||||||
return tcx.const_error(ty).into();
|
return tcx.const_error(ty).into();
|
||||||
}
|
}
|
||||||
|
@ -2037,7 +2037,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
|||||||
args: &[hir::Expr<'_>],
|
args: &[hir::Expr<'_>],
|
||||||
kind: CallableKind| {
|
kind: CallableKind| {
|
||||||
let arg_idx = args.iter().position(|a| a.hir_id == expr.hir_id).unwrap();
|
let arg_idx = args.iter().position(|a| a.hir_id == expr.hir_id).unwrap();
|
||||||
let fn_ty = self.tcx.type_of(def_id).0;
|
let fn_ty = self.tcx.type_of(def_id).skip_binder();
|
||||||
if !fn_ty.is_fn() {
|
if !fn_ty.is_fn() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1228,7 +1228,9 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
|||||||
let tcx = self.fcx.tcx();
|
let tcx = self.fcx.tcx();
|
||||||
self.fcx
|
self.fcx
|
||||||
.ct_infer(
|
.ct_infer(
|
||||||
tcx.type_of(param.def_id).subst_identity(),
|
tcx.type_of(param.def_id)
|
||||||
|
.no_bound_vars()
|
||||||
|
.expect("const parameter types cannot be generic"),
|
||||||
Some(param),
|
Some(param),
|
||||||
inf.span,
|
inf.span,
|
||||||
)
|
)
|
||||||
|
@ -386,7 +386,9 @@ impl<'a, 'tcx> ConfirmContext<'a, 'tcx> {
|
|||||||
let tcx = self.cfcx.tcx();
|
let tcx = self.cfcx.tcx();
|
||||||
self.cfcx
|
self.cfcx
|
||||||
.ct_infer(
|
.ct_infer(
|
||||||
tcx.type_of(param.def_id).subst_identity(),
|
tcx.type_of(param.def_id)
|
||||||
|
.no_bound_vars()
|
||||||
|
.expect("const parameter types cannot be generic"),
|
||||||
Some(param),
|
Some(param),
|
||||||
inf.span,
|
inf.span,
|
||||||
)
|
)
|
||||||
|
@ -1958,7 +1958,14 @@ impl<'a, 'tcx> ProbeContext<'a, 'tcx> {
|
|||||||
kind: ConstVariableOriginKind::SubstitutionPlaceholder,
|
kind: ConstVariableOriginKind::SubstitutionPlaceholder,
|
||||||
span,
|
span,
|
||||||
};
|
};
|
||||||
self.next_const_var(self.tcx.type_of(param.def_id).subst_identity(), origin).into()
|
self.next_const_var(
|
||||||
|
self.tcx
|
||||||
|
.type_of(param.def_id)
|
||||||
|
.no_bound_vars()
|
||||||
|
.expect("const parameter types cannot be generic"),
|
||||||
|
origin,
|
||||||
|
)
|
||||||
|
.into()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -1167,7 +1167,13 @@ impl<'tcx> InferCtxt<'tcx> {
|
|||||||
val: ConstVariableValue::Unknown { universe: self.universe() },
|
val: ConstVariableValue::Unknown { universe: self.universe() },
|
||||||
});
|
});
|
||||||
self.tcx
|
self.tcx
|
||||||
.mk_const(const_var_id, self.tcx.type_of(param.def_id).subst_identity())
|
.mk_const(
|
||||||
|
const_var_id,
|
||||||
|
self.tcx
|
||||||
|
.type_of(param.def_id)
|
||||||
|
.no_bound_vars()
|
||||||
|
.expect("const parameter types cannot be generic"),
|
||||||
|
)
|
||||||
.into()
|
.into()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -71,7 +71,10 @@ impl<'tcx> Const<'tcx> {
|
|||||||
let expr = &tcx.hir().body(body_id).value;
|
let expr = &tcx.hir().body(body_id).value;
|
||||||
debug!(?expr);
|
debug!(?expr);
|
||||||
|
|
||||||
let ty = tcx.type_of(def.def_id_for_type_of()).subst_identity();
|
let ty = tcx
|
||||||
|
.type_of(def.def_id_for_type_of())
|
||||||
|
.no_bound_vars()
|
||||||
|
.expect("const parameter types cannot be generic");
|
||||||
|
|
||||||
match Self::try_eval_lit_or_param(tcx, ty, expr) {
|
match Self::try_eval_lit_or_param(tcx, ty, expr) {
|
||||||
Some(v) => v,
|
Some(v) => v,
|
||||||
|
@ -2002,7 +2002,9 @@ impl<'tcx> TyCtxt<'tcx> {
|
|||||||
GenericParamDefKind::Const { .. } => self
|
GenericParamDefKind::Const { .. } => self
|
||||||
.mk_const(
|
.mk_const(
|
||||||
ParamConst { index: param.index, name: param.name },
|
ParamConst { index: param.index, name: param.name },
|
||||||
self.type_of(param.def_id).subst_identity(),
|
self.type_of(param.def_id)
|
||||||
|
.no_bound_vars()
|
||||||
|
.expect("const parameter types cannot be generic"),
|
||||||
)
|
)
|
||||||
.into(),
|
.into(),
|
||||||
}
|
}
|
||||||
|
@ -557,7 +557,9 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
|
|||||||
ty::INNERMOST,
|
ty::INNERMOST,
|
||||||
ty::BoundVar::from_usize(bound_vars.len() - 1),
|
ty::BoundVar::from_usize(bound_vars.len() - 1),
|
||||||
),
|
),
|
||||||
tcx.type_of(param.def_id).subst_identity(),
|
tcx.type_of(param.def_id)
|
||||||
|
.no_bound_vars()
|
||||||
|
.expect("const parameter types cannot be generic"),
|
||||||
)
|
)
|
||||||
.into()
|
.into()
|
||||||
}
|
}
|
||||||
|
@ -508,7 +508,12 @@ fn clean_generic_param_def<'tcx>(
|
|||||||
GenericParamDefKind::Const {
|
GenericParamDefKind::Const {
|
||||||
did: def.def_id,
|
did: def.def_id,
|
||||||
ty: Box::new(clean_middle_ty(
|
ty: Box::new(clean_middle_ty(
|
||||||
ty::Binder::dummy(cx.tcx.type_of(def.def_id).subst_identity()),
|
ty::Binder::dummy(
|
||||||
|
cx.tcx
|
||||||
|
.type_of(def.def_id)
|
||||||
|
.no_bound_vars()
|
||||||
|
.expect("const parameter types cannot be generic"),
|
||||||
|
),
|
||||||
cx,
|
cx,
|
||||||
Some(def.def_id),
|
Some(def.def_id),
|
||||||
)),
|
)),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user