use ty::Unevaluated<'tcx, ()> in type system
This commit is contained in:
parent
7098c181f8
commit
a4bbb8db5c
32 changed files with 304 additions and 192 deletions
|
@ -22,9 +22,7 @@ use rustc_middle::mir::{
|
|||
};
|
||||
use rustc_middle::ty::layout::{LayoutError, LayoutOf, LayoutOfHelpers, TyAndLayout};
|
||||
use rustc_middle::ty::subst::{InternalSubsts, Subst};
|
||||
use rustc_middle::ty::{
|
||||
self, ConstInt, ConstKind, Instance, ParamEnv, ScalarInt, Ty, TyCtxt, TypeVisitable,
|
||||
};
|
||||
use rustc_middle::ty::{self, ConstInt, Instance, ParamEnv, ScalarInt, Ty, TyCtxt, TypeVisitable};
|
||||
use rustc_session::lint;
|
||||
use rustc_span::Span;
|
||||
use rustc_target::abi::{HasDataLayout, Size, TargetDataLayout};
|
||||
|
@ -301,18 +299,17 @@ impl<'mir, 'tcx> ConstPropagator<'mir, 'tcx> {
|
|||
let err = ConstEvalErr::new(&self.ecx, error, Some(c.span));
|
||||
if let Some(lint_root) = self.lint_root(source_info) {
|
||||
let lint_only = match c.literal {
|
||||
ConstantKind::Ty(ct) => match ct.kind() {
|
||||
ConstantKind::Ty(_) => c.literal.needs_subst(),
|
||||
ConstantKind::Unevaluated(
|
||||
ty::Unevaluated { def: _, substs: _, promoted: Some(_) },
|
||||
_,
|
||||
) => {
|
||||
// Promoteds must lint and not error as the user didn't ask for them
|
||||
ConstKind::Unevaluated(ty::Unevaluated {
|
||||
def: _,
|
||||
substs: _,
|
||||
promoted: Some(_),
|
||||
}) => true,
|
||||
// Out of backwards compatibility we cannot report hard errors in unused
|
||||
// generic functions using associated constants of the generic parameters.
|
||||
_ => c.literal.needs_subst(),
|
||||
},
|
||||
ConstantKind::Val(_, ty) => ty.needs_subst(),
|
||||
true
|
||||
}
|
||||
ConstantKind::Unevaluated(_, ty) | ConstantKind::Val(_, ty) => {
|
||||
ty.needs_subst()
|
||||
}
|
||||
};
|
||||
if lint_only {
|
||||
// Out of backwards compatibility we cannot report hard errors in unused
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue