Skip to content

Commit c3a2302

Browse files
committed
Erase late bound regions from instance fn_sig()
Late bound regions were still part of the signature.
1 parent eeff92a commit c3a2302

File tree

3 files changed

+19
-7
lines changed

3 files changed

+19
-7
lines changed

compiler/rustc_smir/src/rustc_smir/context.rs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ use stable_mir::mir::mono::{InstanceDef, StaticDef};
1313
use stable_mir::mir::Body;
1414
use stable_mir::target::{MachineInfo, MachineSize};
1515
use stable_mir::ty::{
16-
AdtDef, AdtKind, Allocation, ClosureDef, ClosureKind, Const, FieldDef, FnDef, GenericArgs,
17-
LineInfo, PolyFnSig, RigidTy, Span, Ty, TyKind, VariantDef,
16+
AdtDef, AdtKind, Allocation, ClosureDef, ClosureKind, Const, FieldDef, FnDef, FnSig,
17+
GenericArgs, LineInfo, PolyFnSig, RigidTy, Span, Ty, TyKind, VariantDef,
1818
};
1919
use stable_mir::{Crate, CrateItem, DefId, Error, Filename, ItemKind, Symbol};
2020
use std::cell::RefCell;
@@ -324,7 +324,16 @@ impl<'tcx> Context for TablesWrapper<'tcx> {
324324
fn instance_ty(&self, def: InstanceDef) -> stable_mir::ty::Ty {
325325
let mut tables = self.0.borrow_mut();
326326
let instance = tables.instances[def];
327-
instance.ty(tables.tcx, ParamEnv::empty()).stable(&mut *tables)
327+
instance.ty(tables.tcx, ParamEnv::reveal_all()).stable(&mut *tables)
328+
}
329+
330+
fn instance_sig(&self, def: InstanceDef) -> FnSig {
331+
let mut tables = self.0.borrow_mut();
332+
let instance = tables.instances[def];
333+
let ty = instance.ty(tables.tcx, ParamEnv::reveal_all());
334+
let sig = if ty.is_fn() { ty.fn_sig(tables.tcx) } else { instance.args.as_closure().sig() };
335+
// Erase late bound regions.
336+
tables.tcx.instantiate_bound_regions_with_erased(sig).stable(&mut *tables)
328337
}
329338

330339
fn instance_def_id(&self, def: InstanceDef) -> stable_mir::DefId {

compiler/stable_mir/src/compiler_interface.rs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@ use crate::mir::mono::{Instance, InstanceDef, StaticDef};
1010
use crate::mir::Body;
1111
use crate::target::MachineInfo;
1212
use crate::ty::{
13-
AdtDef, AdtKind, Allocation, ClosureDef, ClosureKind, Const, FieldDef, FnDef, GenericArgs,
14-
GenericPredicates, Generics, ImplDef, ImplTrait, LineInfo, PolyFnSig, RigidTy, Span, TraitDecl,
15-
TraitDef, Ty, TyKind, VariantDef,
13+
AdtDef, AdtKind, Allocation, ClosureDef, ClosureKind, Const, FieldDef, FnDef, FnSig,
14+
GenericArgs, GenericPredicates, Generics, ImplDef, ImplTrait, LineInfo, PolyFnSig, RigidTy,
15+
Span, TraitDecl, TraitDef, Ty, TyKind, VariantDef,
1616
};
1717
use crate::{
1818
mir, Crate, CrateItem, CrateItems, DefId, Error, Filename, ImplTraitDecls, ItemKind, Symbol,
@@ -121,6 +121,9 @@ pub trait Context {
121121
/// Get the instance type with generic substitutions applied and lifetimes erased.
122122
fn instance_ty(&self, instance: InstanceDef) -> Ty;
123123

124+
/// Get the instance signature with .
125+
fn instance_sig(&self, def: InstanceDef) -> FnSig;
126+
124127
/// Get the instance.
125128
fn instance_def_id(&self, instance: InstanceDef) -> DefId;
126129

compiler/stable_mir/src/mir/mono.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ impl Instance {
117117

118118
/// Get this function signature with all types already instantiated.
119119
pub fn fn_sig(&self) -> FnSig {
120-
self.ty().kind().fn_sig().unwrap().skip_binder()
120+
with(|cx| cx.instance_sig(self.def))
121121
}
122122

123123
/// Check whether this instance is an empty shim.

0 commit comments

Comments
 (0)