- regionck: after main is complete, the regionck pass goes over all
types looking for regions and making sure that they did not escape
- into places they are not in scope. This may also influence the
+ into places where they are not in scope. This may also influence the
final assignments of the various region variables if there is some
flexibility.
let typeck_results = Inherited::build(tcx, def_id).enter(|inh| {
let param_env = tcx.param_env(def_id);
- let (fcx, wf_tys) = if let Some(hir::FnSig { header, decl, .. }) = fn_sig {
+ let fcx = if let Some(hir::FnSig { header, decl, .. }) = fn_sig {
let fn_sig = if crate::collect::get_infer_ret_ty(&decl.output).is_some() {
let fcx = FnCtxt::new(&inh, param_env, body.value.hir_id);
<dyn AstConv<'_>>::ty_of_fn(&fcx, id, header.unsafety, header.abi, decl, None, None)
check_abi(tcx, id, span, fn_sig.abi());
- // When normalizing the function signature, we assume all types are
- // well-formed. So, we don't need to worry about the obligations
- // from normalization. We could just discard these, but to align with
- // compare_method and elsewhere, we just add implied bounds for
- // these types.
- let mut wf_tys = FxHashSet::default();
- // Compute the fty from point of view of inside the fn.
+ // Compute the function signature from point of view of inside the fn.
let fn_sig = tcx.liberate_late_bound_regions(def_id.to_def_id(), fn_sig);
let fn_sig = inh.normalize_associated_types_in(
body.value.span,
param_env,
fn_sig,
);
- wf_tys.extend(fn_sig.inputs_and_output.iter());
-
- let fcx = check_fn(&inh, param_env, fn_sig, decl, id, body, None, true).0;
- (fcx, wf_tys)
+ check_fn(&inh, param_env, fn_sig, decl, id, body, None, true).0
} else {
let fcx = FnCtxt::new(&inh, param_env, body.value.hir_id);
let expected_type = body_ty
fcx.write_ty(id, expected_type);
- (fcx, FxHashSet::default())
+ fcx
};
let fallback_has_occurred = fcx.type_inference_fallback();
fcx.check_asms();
- if fn_sig.is_some() {
- fcx.regionck_fn(id, body, span, wf_tys);
- } else {
- fcx.regionck_expr(body);
- }
+ fcx.infcx.skip_region_resolution();
fcx.resolve_type_vars_in_body(body)
});
}
}
-fn maybe_check_static_with_link_section(tcx: TyCtxt<'_>, id: LocalDefId, span: Span) {
+fn maybe_check_static_with_link_section(tcx: TyCtxt<'_>, id: LocalDefId) {
// Only restricted on wasm target for now
if !tcx.sess.target.is_like_wasm {
return;
let msg = "statics with a custom `#[link_section]` must be a \
simple list of bytes on the wasm target with no \
extra levels of indirection such as references";
- tcx.sess.span_err(span, msg);
+ tcx.sess.span_err(tcx.def_span(id), msg);
}
}
// adding the associated item at the end of its body.
let sugg_sp = full_impl_span.with_lo(hi).with_hi(hi);
// Obtain the level of indentation ending in `sugg_sp`.
- let indentation = tcx.sess.source_map().span_to_margin(sugg_sp).unwrap_or(0);
- // Make the whitespace that will make the suggestion have the right indentation.
- let padding: String = " ".repeat(indentation);
+ let padding =
+ tcx.sess.source_map().indentation_before(sugg_sp).unwrap_or_else(|| String::new());
for trait_item in missing_items {
let snippet = suggestion_signature(trait_item, tcx);