Skip to content

Commit 94e25b8

Browse files
authored
Update toolchain (#913)
1 parent 2cf8d06 commit 94e25b8

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+532
-495
lines changed

Cargo.lock

Lines changed: 16 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ hashbrown = "0.14.3"
3636
home = "0.5.9"
3737
itertools = "0.13.0"
3838
pad-adapter = "0.1.1"
39+
rustc-hash = "2.0.0"
3940
serde = { version = "1.0", features = ["derive"] }
4041
serde_json = "1.0"
4142
toml = "0.8"

crates/flux-arc-interner/Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ version = "0.1.0"
77
dashmap.workspace = true
88
hashbrown.workspace = true
99

10+
rustc-hash.workspace = true
11+
1012
[lints]
1113
workspace = true
1214

crates/flux-arc-interner/src/lib.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
55
#![feature(rustc_private)]
66

7-
extern crate rustc_hash;
87
extern crate rustc_serialize;
98
extern crate rustc_target;
109

crates/flux-common/Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ edition.workspace = true
99
[dependencies]
1010
flux-config.workspace = true
1111

12+
rustc-hash.workspace = true
13+
1214
[package.metadata.rust-analyzer]
1315
rustc_private = true
1416

crates/flux-common/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
extern crate rustc_borrowck;
44
extern crate rustc_errors;
5-
extern crate rustc_hash;
5+
66
extern crate rustc_hir;
77
extern crate rustc_index;
88
extern crate rustc_middle;

crates/flux-desugar/Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@ flux-errors.workspace = true
1717
flux-macros.workspace = true
1818
flux-middle.workspace = true
1919
flux-syntax.workspace = true
20+
2021
itertools.workspace = true
22+
rustc-hash.workspace = true
2123

2224
[package.metadata.rust-analyzer]
2325
rustc_private = true

crates/flux-desugar/src/desugar.rs

Lines changed: 46 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use flux_syntax::{
1313
walk_list,
1414
};
1515
use hir::{def::DefKind, ItemKind};
16-
use rustc_data_structures::{fx::FxIndexSet, unord::UnordMap};
16+
use rustc_data_structures::fx::FxIndexSet;
1717
use rustc_errors::{Diagnostic, ErrorGuaranteed};
1818
use rustc_hash::FxHashSet;
1919
use rustc_hir::{self as hir, OwnerId};
@@ -104,7 +104,7 @@ pub(crate) struct RustItemCtxt<'a, 'genv, 'tcx> {
104104
owner: MaybeExternId<OwnerId>,
105105
fn_sig_scope: Option<NodeId>,
106106
resolver_output: &'genv ResolverOutput,
107-
opaque_tys: Option<&'a mut UnordMap<LocalDefId, fhir::Item<'genv>>>,
107+
opaque_tys: Option<&'a mut Vec<&'genv fhir::OpaqueTy<'genv>>>,
108108
}
109109

110110
struct FluxItemCtxt<'genv, 'tcx> {
@@ -119,7 +119,7 @@ impl<'a, 'genv, 'tcx: 'genv> RustItemCtxt<'a, 'genv, 'tcx> {
119119
genv: GlobalEnv<'genv, 'tcx>,
120120
owner: MaybeExternId<OwnerId>,
121121
resolver_output: &'genv ResolverOutput,
122-
opaque_tys: Option<&'a mut UnordMap<LocalDefId, fhir::Item<'genv>>>,
122+
opaque_tys: Option<&'a mut Vec<&'genv fhir::OpaqueTy<'genv>>>,
123123
) -> Self {
124124
RustItemCtxt {
125125
genv,
@@ -131,13 +131,6 @@ impl<'a, 'genv, 'tcx: 'genv> RustItemCtxt<'a, 'genv, 'tcx> {
131131
}
132132
}
133133

134-
fn with_new_owner<'b>(
135-
&'b mut self,
136-
owner: MaybeExternId<OwnerId>,
137-
) -> RustItemCtxt<'b, 'genv, 'tcx> {
138-
RustItemCtxt::new(self.genv, owner, self.resolver_output, self.opaque_tys.as_deref_mut())
139-
}
140-
141134
fn as_lift_cx<'b>(&'b mut self) -> LiftCtxt<'b, 'genv, 'tcx> {
142135
LiftCtxt::new(self.genv, self.owner, &self.local_id_gen, self.opaque_tys.as_deref_mut())
143136
}
@@ -248,10 +241,7 @@ impl<'a, 'genv, 'tcx: 'genv> RustItemCtxt<'a, 'genv, 'tcx> {
248241
bounds: &[surface::TraitRef],
249242
) -> Result<fhir::GenericBounds<'genv>> {
250243
try_alloc_slice!(self.genv, bounds, |bound| {
251-
Ok(fhir::GenericBound::Trait(
252-
self.desugar_trait_ref(bound)?,
253-
fhir::TraitBoundModifier::None,
254-
))
244+
Ok(fhir::GenericBound::Trait(self.desugar_trait_ref(bound)?))
255245
})
256246
}
257247

@@ -263,7 +253,12 @@ impl<'a, 'genv, 'tcx: 'genv> RustItemCtxt<'a, 'genv, 'tcx> {
263253
span_bug!(trait_ref.path.span, "desugar_alias_reft: unexpected qpath")
264254
};
265255
let span = path.span;
266-
Ok(fhir::PolyTraitRef { bound_generic_params: &[], trait_ref: path, span })
256+
Ok(fhir::PolyTraitRef {
257+
bound_generic_params: &[],
258+
modifiers: fhir::TraitBoundModifier::None,
259+
trait_ref: path,
260+
span,
261+
})
267262
}
268263

269264
fn desugar_refined_by(
@@ -638,21 +633,13 @@ impl<'a, 'genv, 'tcx: 'genv> RustItemCtxt<'a, 'genv, 'tcx> {
638633
) -> Result<fhir::Ty<'genv>> {
639634
match asyncness {
640635
surface::Async::Yes { node_id, span } => {
641-
let item_id = self.resolver_output.impl_trait_res_map[&node_id];
642-
let def_id = item_id.owner_id.def_id;
643-
let res = Res::Def(DefKind::OpaqueTy, def_id.to_def_id());
644-
636+
let def_id = self.resolver_output.impl_trait_res_map[&node_id];
645637
// FIXME(nilehmann) since we can only pass local ids for opaque types it means we
646638
// can't support extern specs with opaque types.
647-
let opaque_ty = self
648-
.with_new_owner(MaybeExternId::Local(item_id.owner_id))
649-
.desugar_opaque_ty_for_async(returns)?;
650-
self.insert_opaque_ty(item_id.owner_id.def_id, opaque_ty);
651-
652-
let (args, _) = self.desugar_generic_args(res, &[])?;
653-
let item_id = hir::ItemId { owner_id: hir::OwnerId { def_id } };
654-
let refine_args = self.implicit_params_to_args(self.fn_sig_scope.unwrap());
655-
let kind = fhir::TyKind::OpaqueDef(item_id, args, refine_args, false);
639+
let opaque_ty = self.desugar_opaque_ty_for_async(def_id, returns)?;
640+
let opaque_ty = self.insert_opaque_ty(opaque_ty);
641+
642+
let kind = fhir::TyKind::OpaqueDef(opaque_ty);
656643
Ok(fhir::Ty { kind, span })
657644
}
658645
surface::Async::No => Ok(self.desugar_fn_ret_ty(returns)?),
@@ -661,11 +648,10 @@ impl<'a, 'genv, 'tcx: 'genv> RustItemCtxt<'a, 'genv, 'tcx> {
661648

662649
fn desugar_opaque_ty_for_async(
663650
&mut self,
651+
def_id: LocalDefId,
664652
returns: &surface::FnRetTy,
665-
) -> Result<fhir::Item<'genv>> {
653+
) -> Result<fhir::OpaqueTy<'genv>> {
666654
let output = self.desugar_fn_ret_ty(returns)?;
667-
// Does this opaque type have any generics?
668-
let generics = self.as_lift_cx().lift_generics()?;
669655
let trait_ref = self.make_lang_item_path(
670656
hir::LangItem::Future,
671657
DUMMY_SP,
@@ -675,13 +661,17 @@ impl<'a, 'genv, 'tcx: 'genv> RustItemCtxt<'a, 'genv, 'tcx> {
675661
kind: fhir::AssocItemConstraintKind::Equality { term: output },
676662
}]),
677663
);
678-
let bound = fhir::GenericBound::Trait(
679-
fhir::PolyTraitRef { bound_generic_params: &[], trait_ref, span: trait_ref.span },
680-
fhir::TraitBoundModifier::None,
681-
);
682-
let opaque_ty = fhir::OpaqueTy { bounds: self.genv.alloc_slice(&[bound]) };
683-
684-
Ok(fhir::Item { generics, kind: fhir::ItemKind::OpaqueTy(opaque_ty), owner_id: self.owner })
664+
let bound = fhir::GenericBound::Trait(fhir::PolyTraitRef {
665+
bound_generic_params: &[],
666+
modifiers: fhir::TraitBoundModifier::None,
667+
trait_ref,
668+
span: trait_ref.span,
669+
});
670+
let opaque_ty = fhir::OpaqueTy {
671+
def_id: MaybeExternId::Local(def_id),
672+
bounds: self.genv.alloc_slice(&[bound]),
673+
};
674+
Ok(opaque_ty)
685675
}
686676

687677
fn make_lang_item_path(
@@ -719,12 +709,12 @@ impl<'a, 'genv, 'tcx: 'genv> RustItemCtxt<'a, 'genv, 'tcx> {
719709

720710
fn desugar_opaque_ty_for_impl_trait(
721711
&mut self,
712+
def_id: LocalDefId,
722713
bounds: &[surface::TraitRef],
723-
) -> Result<fhir::Item<'genv>> {
724-
let generics = self.as_lift_cx().lift_generics()?;
714+
) -> Result<fhir::OpaqueTy<'genv>> {
725715
let bounds = self.desugar_generic_bounds(bounds)?;
726-
let opaque_ty = fhir::OpaqueTy { bounds };
727-
Ok(fhir::Item { generics, kind: fhir::ItemKind::OpaqueTy(opaque_ty), owner_id: self.owner })
716+
let opaque_ty = fhir::OpaqueTy { def_id: MaybeExternId::Local(def_id), bounds };
717+
Ok(opaque_ty)
728718
}
729719

730720
fn desugar_variant_ret(
@@ -772,11 +762,16 @@ impl<'a, 'genv, 'tcx: 'genv> RustItemCtxt<'a, 'genv, 'tcx> {
772762
Some(resolved_id)
773763
}
774764

775-
fn insert_opaque_ty(&mut self, def_id: LocalDefId, opaque_ty: fhir::Item<'genv>) {
765+
fn insert_opaque_ty(
766+
&mut self,
767+
opaque_ty: fhir::OpaqueTy<'genv>,
768+
) -> &'genv fhir::OpaqueTy<'genv> {
769+
let opaque_ty = self.genv.alloc(opaque_ty);
776770
self.opaque_tys
777771
.as_mut()
778-
.unwrap_or_else(|| bug!("`impl Trait` not supported in this item {def_id:?}"))
779-
.insert(def_id, opaque_ty);
772+
.unwrap_or_else(|| bug!("`impl Trait` not supported in this item `{:?}`", self.owner))
773+
.push(opaque_ty);
774+
opaque_ty
780775
}
781776

782777
#[track_caller]
@@ -897,27 +892,6 @@ trait DesugarCtxt<'genv, 'tcx: 'genv> {
897892
})
898893
}
899894

900-
fn implicit_params_to_args(&self, scope: NodeId) -> &'genv [fhir::Expr<'genv>] {
901-
self.genv()
902-
.alloc_slice_fill_iter(
903-
self.resolve_implicit_params(scope)
904-
.map(|(ident, id, kind)| {
905-
let span = ident.span;
906-
let path = fhir::PathExpr {
907-
segments: self.genv().alloc_slice(&[ident]),
908-
res: ExprRes::Param(kind, id),
909-
fhir_id: self.next_fhir_id(),
910-
span: ident.span,
911-
};
912-
fhir::Expr {
913-
kind: fhir::ExprKind::Var(path, Some(kind)),
914-
fhir_id: self.next_fhir_id(),
915-
span,
916-
}
917-
}),
918-
)
919-
}
920-
921895
fn desugar_refine_params(
922896
&self,
923897
params: &[surface::RefineParam],
@@ -1512,7 +1486,7 @@ fn desugar_base_sort<'genv>(
15121486
}
15131487
}
15141488

1515-
impl<'a, 'genv, 'tcx> DesugarCtxt<'genv, 'tcx> for RustItemCtxt<'a, 'genv, 'tcx> {
1489+
impl<'genv, 'tcx> DesugarCtxt<'genv, 'tcx> for RustItemCtxt<'_, 'genv, 'tcx> {
15161490
fn next_fhir_id(&self) -> FhirId {
15171491
FhirId {
15181492
owner: FluxOwnerId::Rust(self.owner.local_id()),
@@ -1533,20 +1507,14 @@ impl<'a, 'genv, 'tcx> DesugarCtxt<'genv, 'tcx> for RustItemCtxt<'a, 'genv, 'tcx>
15331507
node_id: NodeId,
15341508
bounds: &[surface::TraitRef],
15351509
) -> Result<fhir::TyKind<'genv>> {
1536-
let item_id = self.resolver_output().impl_trait_res_map[&node_id];
1537-
let def_id = item_id.owner_id.def_id;
1538-
let res = Res::Def(DefKind::OpaqueTy, def_id.to_def_id());
1510+
let def_id = self.resolver_output().impl_trait_res_map[&node_id];
15391511

15401512
// FIXME(nilehmann) since we can only pass local ids for opaque types it means we can't
15411513
// support extern specs with opaque types.
1542-
let opaque_ty = self
1543-
.with_new_owner(MaybeExternId::Local(item_id.owner_id))
1544-
.desugar_opaque_ty_for_impl_trait(bounds)?;
1545-
self.insert_opaque_ty(def_id, opaque_ty);
1546-
1547-
let (args, _) = self.desugar_generic_args(res, &[])?;
1548-
let refine_args = self.implicit_params_to_args(self.fn_sig_scope.unwrap());
1549-
Ok(fhir::TyKind::OpaqueDef(item_id, args, refine_args, false))
1514+
let opaque_ty = self.desugar_opaque_ty_for_impl_trait(def_id, bounds)?;
1515+
let opaque_ty = self.insert_opaque_ty(opaque_ty);
1516+
1517+
Ok(fhir::TyKind::OpaqueDef(opaque_ty))
15501518
}
15511519
}
15521520

0 commit comments

Comments
 (0)