added trans_ prefix and pluralised types. Solved failing test on the incremental test-suite.

This commit is contained in:
Marco Concetto Rudilosso 2017-10-11 18:03:59 +01:00
parent 96a006c186
commit 69f5f0d193
9 changed files with 15 additions and 14 deletions

View File

@ -480,16 +480,16 @@ impl<'a, 'tcx> TyCtxt<'a, 'tcx, 'tcx> {
{
assert!(!value.needs_subst());
let value = self.erase_late_bound_regions(value);
self.normalize_associated_type_in(&value)
self.trans_normalize_associated_types_in(&value)
}
/// Fully normalizes any associated types in `value`, using an
/// empty environment and `Reveal::All` mode (therefore, suitable
/// only for monomorphized code during trans, basically).
pub fn normalize_associated_type_in<T>(self, value: &T) -> T
pub fn trans_normalize_associated_types_in<T>(self, value: &T) -> T
where T: TransNormalize<'tcx>
{
debug!("normalize_associated_type_in(t={:?})", value);
debug!("trans_normalize_associated_types_in(t={:?})", value);
let param_env = ty::ParamEnv::empty(Reveal::All);
let value = self.erase_regions(value);

View File

@ -2323,6 +2323,6 @@ pub fn provide(providers: &mut ty::maps::Providers) {
tcx.sess.features.borrow().clone_closures
};
providers.normalize_ty = |tcx, ty| {
tcx.normalize_associated_type_in(&ty)
tcx.trans_normalize_associated_types_in(&ty)
};
}

View File

@ -697,6 +697,7 @@ pub fn force_from_dep_node<'a, 'gcx, 'lcx>(tcx: TyCtxt<'a, 'gcx, 'lcx>,
DepKind::FulfillObligation |
DepKind::VtableMethods |
DepKind::EraseRegionsTy |
DepKind::NormalizeTy |
// These are just odd
DepKind::Null |

View File

@ -431,7 +431,7 @@ impl<'a, 'tcx> ImproperCTypesVisitor<'a, 'tcx> {
// fields are actually safe.
let mut all_phantom = true;
for field in &def.struct_variant().fields {
let field_ty = cx.normalize_associated_type_in(&field.ty(cx, substs));
let field_ty = cx.trans_normalize_associated_types_in(&field.ty(cx, substs));
let r = self.check_type_for_ffi(cache, field_ty);
match r {
FfiSafe => {
@ -463,7 +463,7 @@ impl<'a, 'tcx> ImproperCTypesVisitor<'a, 'tcx> {
let mut all_phantom = true;
for field in &def.struct_variant().fields {
let field_ty = cx.normalize_associated_type_in(&field.ty(cx, substs));
let field_ty = cx.trans_normalize_associated_types_in(&field.ty(cx, substs));
let r = self.check_type_for_ffi(cache, field_ty);
match r {
FfiSafe => {
@ -516,7 +516,7 @@ impl<'a, 'tcx> ImproperCTypesVisitor<'a, 'tcx> {
// Check the contained variants.
for variant in &def.variants {
for field in &variant.fields {
let arg = cx.normalize_associated_type_in(&field.ty(cx, substs));
let arg = cx.trans_normalize_associated_types_in(&field.ty(cx, substs));
let r = self.check_type_for_ffi(cache, arg);
match r {
FfiSafe => {}
@ -629,7 +629,7 @@ impl<'a, 'tcx> ImproperCTypesVisitor<'a, 'tcx> {
fn check_type_for_ffi_and_report_errors(&mut self, sp: Span, ty: Ty<'tcx>) {
// it is only OK to use this function because extern fns cannot have
// any generic types right now:
let ty = self.cx.tcx.normalize_associated_type_in(&ty);
let ty = self.cx.tcx.trans_normalize_associated_types_in(&ty);
match self.check_type_for_ffi(&mut FxHashSet(), ty) {
FfiResult::FfiSafe => {}

View File

@ -80,7 +80,7 @@ pub fn compute_fields<'a, 'tcx>(cx: &CrateContext<'a, 'tcx>, t: Ty<'tcx>,
ty::TyGenerator(def_id, substs, _) => {
if variant_index > 0 { bug!("{} is a generator, which only has one variant", t);}
substs.field_tys(def_id, cx.tcx()).map(|t| {
cx.tcx().normalize_associated_type_in(&t)
cx.tcx().trans_normalize_associated_types_in(&t)
}).collect()
},
_ => bug!("{} is not a type that can have fields.", t)

View File

@ -642,7 +642,7 @@ impl<'a, 'tcx> LayoutTyper<'tcx> for &'a SharedCrateContext<'a, 'tcx> {
}
fn normalize_projections(self, ty: Ty<'tcx>) -> Ty<'tcx> {
self.tcx().normalize_associated_type_in(&ty)
self.tcx().trans_normalize_associated_types_in(&ty)
}
}

View File

@ -582,7 +582,7 @@ pub fn type_metadata<'a, 'tcx>(cx: &CrateContext<'a, 'tcx>,
}
ty::TyGenerator(def_id, substs, _) => {
let upvar_tys : Vec<_> = substs.field_tys(def_id, cx.tcx()).map(|t| {
cx.tcx().normalize_associated_type_in(&t)
cx.tcx().trans_normalize_associated_types_in(&t)
}).collect();
prepare_tuple_metadata(cx,
t,

View File

@ -376,7 +376,7 @@ pub fn create_function_debug_context<'a, 'tcx>(cx: &CrateContext<'a, 'tcx>,
name_to_append_suffix_to.push_str(",");
}
let actual_type = cx.tcx().normalize_associated_type_in(&actual_type);
let actual_type = cx.tcx().trans_normalize_associated_types_in(&actual_type);
// Add actual type name to <...> clause of function name
let actual_type_name = compute_debuginfo_type_name(cx,
actual_type,
@ -389,7 +389,7 @@ pub fn create_function_debug_context<'a, 'tcx>(cx: &CrateContext<'a, 'tcx>,
let template_params: Vec<_> = if cx.sess().opts.debuginfo == FullDebugInfo {
let names = get_type_parameter_names(cx, generics);
substs.types().zip(names).map(|(ty, name)| {
let actual_type = cx.tcx().normalize_associated_type_in(&ty);
let actual_type = cx.tcx().trans_normalize_associated_types_in(&ty);
let actual_type_metadata = type_metadata(cx, actual_type, syntax_pos::DUMMY_SP);
let name = CString::new(name.as_str().as_bytes()).unwrap();
unsafe {

View File

@ -131,6 +131,6 @@ pub fn field_ty<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
f: &'tcx ty::FieldDef)
-> Ty<'tcx>
{
tcx.normalize_associated_type_in(&f.ty(tcx, param_substs))
tcx.trans_normalize_associated_types_in(&f.ty(tcx, param_substs))
}