Skip to content

Commit c8979e5

Browse files
committed
Move opaque_type_origin_unchecked onto TyCtxt and re-use it where it was open coded
1 parent fa06a37 commit c8979e5

File tree

6 files changed

+14
-15
lines changed

6 files changed

+14
-15
lines changed

compiler/rustc_hir_analysis/src/check/check.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -563,8 +563,8 @@ fn check_item_type(tcx: TyCtxt<'_>, id: hir::ItemId) {
563563
check_union(tcx, id.owner_id.def_id);
564564
}
565565
DefKind::OpaqueTy => {
566-
let opaque = tcx.hir().expect_item(id.owner_id.def_id).expect_opaque_ty();
567-
if let hir::OpaqueTyOrigin::FnReturn(fn_def_id) | hir::OpaqueTyOrigin::AsyncFn(fn_def_id) = opaque.origin
566+
let origin = tcx.opaque_type_origin(id.owner_id.def_id);
567+
if let hir::OpaqueTyOrigin::FnReturn(fn_def_id) | hir::OpaqueTyOrigin::AsyncFn(fn_def_id) = origin
568568
&& let hir::Node::TraitItem(trait_item) = tcx.hir().get_by_def_id(fn_def_id)
569569
&& let (_, hir::TraitFn::Required(..)) = trait_item.expect_fn()
570570
{

compiler/rustc_hir_analysis/src/check/wfcheck.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1543,8 +1543,8 @@ impl<'tcx> TypeVisitor<TyCtxt<'tcx>> for ImplTraitInTraitFinder<'_, 'tcx> {
15431543
if let ty::Alias(ty::Opaque, unshifted_opaque_ty) = *ty.kind()
15441544
&& self.seen.insert(unshifted_opaque_ty.def_id)
15451545
&& let Some(opaque_def_id) = unshifted_opaque_ty.def_id.as_local()
1546-
&& let opaque = tcx.hir().expect_item(opaque_def_id).expect_opaque_ty()
1547-
&& let hir::OpaqueTyOrigin::FnReturn(source) | hir::OpaqueTyOrigin::AsyncFn(source) = opaque.origin
1546+
&& let origin = tcx.opaque_type_origin(opaque_def_id)
1547+
&& let hir::OpaqueTyOrigin::FnReturn(source) | hir::OpaqueTyOrigin::AsyncFn(source) = origin
15481548
&& source == self.fn_def_id
15491549
{
15501550
let opaque_ty = tcx.fold_regions(unshifted_opaque_ty, |re, _depth| {

compiler/rustc_infer/src/infer/opaque_types.rs

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -378,7 +378,7 @@ impl<'tcx> InferCtxt<'tcx> {
378378
DefiningAnchor::Bind(bind) => bind,
379379
};
380380

381-
let origin = self.opaque_type_origin_unchecked(def_id);
381+
let origin = self.tcx.opaque_type_origin(def_id);
382382
let in_definition_scope = match origin {
383383
// Async `impl Trait`
384384
hir::OpaqueTyOrigin::AsyncFn(parent) => parent == parent_def_id,
@@ -395,13 +395,6 @@ impl<'tcx> InferCtxt<'tcx> {
395395
};
396396
in_definition_scope.then_some(origin)
397397
}
398-
399-
/// Returns the origin of the opaque type `def_id` even if we are not in its
400-
/// defining scope.
401-
#[instrument(skip(self), level = "trace", ret)]
402-
fn opaque_type_origin_unchecked(&self, def_id: LocalDefId) -> OpaqueTyOrigin {
403-
self.tcx.hir().expect_item(def_id).expect_opaque_ty().origin
404-
}
405398
}
406399

407400
/// Visitor that requires that (almost) all regions in the type visited outlive

compiler/rustc_metadata/src/rmeta/encoder.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1138,8 +1138,8 @@ fn should_encode_type(tcx: TyCtxt<'_>, def_id: LocalDefId, def_kind: DefKind) ->
11381138
| DefKind::InlineConst => true,
11391139

11401140
DefKind::OpaqueTy => {
1141-
let opaque = tcx.hir().expect_item(def_id).expect_opaque_ty();
1142-
if let hir::OpaqueTyOrigin::FnReturn(fn_def_id) | hir::OpaqueTyOrigin::AsyncFn(fn_def_id) = opaque.origin
1141+
let origin = tcx.opaque_type_origin(def_id);
1142+
if let hir::OpaqueTyOrigin::FnReturn(fn_def_id) | hir::OpaqueTyOrigin::AsyncFn(fn_def_id) = origin
11431143
&& let hir::Node::TraitItem(trait_item) = tcx.hir().get_by_def_id(fn_def_id)
11441144
&& let (_, hir::TraitFn::Required(..)) = trait_item.expect_fn()
11451145
{

compiler/rustc_middle/src/ty/context.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1189,6 +1189,12 @@ impl<'tcx> TyCtxt<'tcx> {
11891189
pub fn local_visibility(self, def_id: LocalDefId) -> Visibility {
11901190
self.visibility(def_id).expect_local()
11911191
}
1192+
1193+
/// Returns the origin of the opaque type `def_id`.
1194+
#[instrument(skip(self), level = "trace", ret)]
1195+
pub fn opaque_type_origin(self, def_id: LocalDefId) -> hir::OpaqueTyOrigin {
1196+
self.hir().expect_item(def_id).expect_opaque_ty().origin
1197+
}
11921198
}
11931199

11941200
/// A trait implemented for all `X<'a>` types that can be safely and

compiler/rustc_ty_utils/src/assoc.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,7 @@ fn associated_type_for_impl_trait_in_trait(
259259
opaque_ty_def_id: LocalDefId,
260260
) -> LocalDefId {
261261
let (hir::OpaqueTyOrigin::FnReturn(fn_def_id) | hir::OpaqueTyOrigin::AsyncFn(fn_def_id)) =
262-
tcx.hir().expect_item(opaque_ty_def_id).expect_opaque_ty().origin
262+
tcx.opaque_type_origin(opaque_ty_def_id)
263263
else {
264264
bug!("expected opaque for {opaque_ty_def_id:?}");
265265
};

0 commit comments

Comments
 (0)