Skip to content

Commit a1884b0

Browse files
committed
Auto merge of #17030 - Veykril:bump-chalk, r=Veykril
internal: Bump chalk And make use of the new error lifetime
2 parents 0636e7c + 8078c3d commit a1884b0

15 files changed

Lines changed: 102 additions & 88 deletions

File tree

‎Cargo.lock‎

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

‎Cargo.toml‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -106,10 +106,10 @@ arrayvec = "0.7.4"
106106
bitflags = "2.4.1"
107107
cargo_metadata = "0.18.1"
108108
camino = "1.1.6"
109-
chalk-solve = { version = "0.96.0", default-features = false }
110-
chalk-ir = "0.96.0"
111-
chalk-recursive = { version = "0.96.0", default-features = false }
112-
chalk-derive = "0.96.0"
109+
chalk-solve = { version = "0.97.0", default-features = false }
110+
chalk-ir = "0.97.0"
111+
chalk-recursive = { version = "0.97.0", default-features = false }
112+
chalk-derive = "0.97.0"
113113
command-group = "2.0.1"
114114
crossbeam-channel = "0.5.8"
115115
dissimilar = "1.0.7"

‎crates/hir-ty/src/display.rs‎

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,10 @@ use crate::{
4242
primitive, to_assoc_type_id,
4343
utils::{self, detect_variant_from_bytes, generics,ClosureSubst},
4444
AdtId,AliasEq,AliasTy,Binders,CallableDefId,CallableSig,Const,ConstScalar,ConstValue,
45-
DomainGoal,FnAbi,GenericArg,ImplTraitId,Interner,Lifetime,LifetimeData,LifetimeOutlives,
46-
MemoryMap,Mutability,OpaqueTy,ProjectionTy,ProjectionTyExt,QuantifiedWhereClause,Scalar,
47-
Substitution,TraitEnvironment,TraitRef,TraitRefExt,Ty,TyExt,WhereClause,
45+
DomainGoal,FnAbi,GenericArg,GenericArgData,ImplTraitId,Interner,Lifetime,LifetimeData,
46+
LifetimeOutlives,MemoryMap,Mutability,OpaqueTy,ProjectionTy,ProjectionTyExt,
47+
QuantifiedWhereClause,Scalar,Substitution,TraitEnvironment,TraitRef,TraitRefExt,Ty,
48+
TyExt,WhereClause,
4849
};
4950

5051
pubtraitHirWrite: fmt::Write{
@@ -1367,8 +1368,8 @@ fn hir_fmt_generics(
13671368
returntrue;
13681369
}
13691370
}
1370-
ifparameter.lifetime(Interner).map(|it| it.data(Interner))
1371-
== Some(&crate::LifetimeData::Static)
1371+
ifletSome(crate::LifetimeData::Static | crate::LifetimeData::Error) =
1372+
parameter.lifetime(Interner).map(|it| it.data(Interner))
13721373
{
13731374
returntrue;
13741375
}
@@ -1403,10 +1404,18 @@ fn hir_fmt_generics(
14031404
write!(f,", ")?;
14041405
}
14051406
first = false;
1406-
if f.display_target.is_source_code()
1407-
&& generic_arg.ty(Interner).map(|ty| ty.kind(Interner)) == Some(&TyKind::Error)
1408-
{
1409-
write!(f,"_")?;
1407+
if f.display_target.is_source_code(){
1408+
match generic_arg.data(Interner){
1409+
GenericArgData::Lifetime(l)
1410+
ifmatches!(l.data(Interner),LifetimeData::Error) =>
1411+
{
1412+
write!(f,"'_")
1413+
}
1414+
GenericArgData::Ty(t)ifmatches!(t.kind(Interner),TyKind::Error) => {
1415+
write!(f,"_")
1416+
}
1417+
_ => generic_arg.hir_fmt(f),
1418+
}?
14101419
}else{
14111420
generic_arg.hir_fmt(f)?;
14121421
}
@@ -1729,6 +1738,7 @@ impl HirDisplay for LifetimeData {
17291738
Ok(())
17301739
}
17311740
LifetimeData::Static => write!(f,"'static"),
1741+
LifetimeData::Error => write!(f,"'{{error}}"),
17321742
LifetimeData::Erased => Ok(()),
17331743
LifetimeData::Phantom(_, _) => Ok(()),
17341744
}

‎crates/hir-ty/src/lib.rs‎

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -612,8 +612,6 @@ has_interner!(ImplTraits);
612612

613613
#[derive(PartialEq,Eq,Debug,Hash)]
614614
pubstructImplTrait{
615-
// FIXME: Should be Arc<[QuantifiedWhereClause]>, but the HasInterner impl for Arc is missing a
616-
// ?Sized bound
617615
pub(crate)bounds:Binders<Vec<QuantifiedWhereClause>>,
618616
}
619617

@@ -624,7 +622,7 @@ pub fn static_lifetime() -> Lifetime {
624622
}
625623

626624
pubfnerror_lifetime() -> Lifetime{
627-
LifetimeData::Static.intern(Interner)
625+
LifetimeData::Error.intern(Interner)
628626
}
629627

630628
pub(crate)fnfold_free_vars<T:HasInterner<Interner = Interner> + TypeFoldable<Interner>>(

‎crates/hir-ty/src/lower.rs‎

Lines changed: 44 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,9 @@ use crate::{
6767
},
6868
AliasEq,AliasTy,Binders,BoundVar,CallableSig,Const,ConstScalar,DebruijnIndex,DynTy,
6969
FnAbi,FnPointer,FnSig,FnSubst,ImplTrait,ImplTraitId,ImplTraits,Interner,Lifetime,
70-
LifetimeData,LifetimeOutlives,ParamKind,PolyFnSig,ProjectionTy,QuantifiedWhereClause,
71-
QuantifiedWhereClauses,Substitution,TraitEnvironment,TraitRef,TraitRefExt,Ty,TyBuilder,
72-
TyKind,WhereClause,
70+
LifetimeData,LifetimeOutlives,ParamKind,PolyFnSig,ProgramClause,ProjectionTy,
71+
QuantifiedWhereClause,QuantifiedWhereClauses,Substitution,TraitEnvironment,TraitRef,
72+
TraitRefExt,Ty,TyBuilder,TyKind,WhereClause,
7373
};
7474

7575
#[derive(Debug)]
@@ -1052,11 +1052,11 @@ impl<'a> TyLoweringContext<'a> {
10521052
self_ty:Ty,
10531053
ignore_bindings:bool,
10541054
) -> implIterator<Item = QuantifiedWhereClause> + 'a{
1055-
letmutbindings = None;
1056-
lettrait_ref = match bound.as_ref(){
1055+
letmuttrait_ref = None;
1056+
letclause = match bound.as_ref(){
10571057
TypeBound::Path(path,TraitBoundModifier::None) => {
1058-
bindings = self.lower_trait_ref_from_path(path,Some(self_ty));
1059-
bindings
1058+
trait_ref = self.lower_trait_ref_from_path(path,Some(self_ty));
1059+
trait_ref
10601060
.clone()
10611061
.filter(|tr| {
10621062
// ignore `T: Drop` or `T: Destruct` bounds.
@@ -1092,8 +1092,8 @@ impl<'a> TyLoweringContext<'a> {
10921092
}
10931093
TypeBound::ForLifetime(_, path) => {
10941094
// FIXME Don't silently drop the hrtb lifetimes here
1095-
bindings = self.lower_trait_ref_from_path(path,Some(self_ty));
1096-
bindings.clone().map(WhereClause::Implemented).map(crate::wrap_empty_binders)
1095+
trait_ref = self.lower_trait_ref_from_path(path,Some(self_ty));
1096+
trait_ref.clone().map(WhereClause::Implemented).map(crate::wrap_empty_binders)
10971097
}
10981098
TypeBound::Lifetime(l) => {
10991099
let lifetime = self.lower_lifetime(l);
@@ -1104,8 +1104,8 @@ impl<'a> TyLoweringContext<'a> {
11041104
}
11051105
TypeBound::Error => None,
11061106
};
1107-
trait_ref.into_iter().chain(
1108-
bindings
1107+
clause.into_iter().chain(
1108+
trait_ref
11091109
.into_iter()
11101110
.filter(move |_| !ignore_bindings)
11111111
.flat_map(move |tr| self.assoc_type_bindings_from_type_bound(bound, tr)),
@@ -1624,10 +1624,14 @@ pub(crate) fn generic_predicates_for_param_query(
16241624

16251625
let subst = generics.bound_vars_subst(db,DebruijnIndex::INNERMOST);
16261626
let explicitly_unsized_tys = ctx.unsized_types.into_inner();
1627-
let implicitly_sized_predicates =
1627+
ifletSome(implicitly_sized_predicates) =
16281628
implicitly_sized_clauses(db, param_id.parent,&explicitly_unsized_tys,&subst,&resolver)
1629-
.map(|p| make_binders(db,&generics,crate::wrap_empty_binders(p)));
1630-
predicates.extend(implicitly_sized_predicates);
1629+
{
1630+
predicates.extend(
1631+
implicitly_sized_predicates
1632+
.map(|p| make_binders(db,&generics,crate::wrap_empty_binders(p))),
1633+
);
1634+
}
16311635
predicates.into()
16321636
}
16331637

@@ -1685,24 +1689,23 @@ pub(crate) fn trait_environment_query(
16851689
let substs = TyBuilder::placeholder_subst(db, trait_id);
16861690
let trait_ref = TraitRef{trait_id:to_chalk_trait_id(trait_id),substitution: substs };
16871691
let pred = WhereClause::Implemented(trait_ref);
1688-
let program_clause: chalk_ir::ProgramClause<Interner> = pred.cast(Interner);
1689-
clauses.push(program_clause.into_from_env_clause(Interner));
1692+
clauses.push(pred.cast::<ProgramClause>(Interner).into_from_env_clause(Interner));
16901693
}
16911694

16921695
let subst = generics(db.upcast(), def).placeholder_subst(db);
16931696
let explicitly_unsized_tys = ctx.unsized_types.into_inner();
1694-
let implicitly_sized_clauses =
1695-
implicitly_sized_clauses(db, def,&explicitly_unsized_tys,&subst,&resolver).map(|pred| {
1696-
let program_clause: chalk_ir::ProgramClause<Interner> = pred.cast(Interner);
1697-
program_clause.into_from_env_clause(Interner)
1698-
});
1699-
clauses.extend(implicitly_sized_clauses);
1700-
1701-
let krate = def.module(db.upcast()).krate();
1697+
ifletSome(implicitly_sized_clauses) =
1698+
implicitly_sized_clauses(db, def,&explicitly_unsized_tys,&subst,&resolver)
1699+
{
1700+
clauses.extend(
1701+
implicitly_sized_clauses
1702+
.map(|pred| pred.cast::<ProgramClause>(Interner).into_from_env_clause(Interner)),
1703+
);
1704+
}
17021705

17031706
let env = chalk_ir::Environment::new(Interner).add_clauses(Interner, clauses);
17041707

1705-
TraitEnvironment::new(krate,None, traits_in_scope.into_boxed_slice(), env)
1708+
TraitEnvironment::new(resolver.krate(),None, traits_in_scope.into_boxed_slice(), env)
17061709
}
17071710

17081711
/// Resolve the where clause(s) of an item with generics.
@@ -1730,10 +1733,14 @@ pub(crate) fn generic_predicates_query(
17301733

17311734
let subst = generics.bound_vars_subst(db,DebruijnIndex::INNERMOST);
17321735
let explicitly_unsized_tys = ctx.unsized_types.into_inner();
1733-
let implicitly_sized_predicates =
1736+
ifletSome(implicitly_sized_predicates) =
17341737
implicitly_sized_clauses(db, def,&explicitly_unsized_tys,&subst,&resolver)
1735-
.map(|p| make_binders(db,&generics,crate::wrap_empty_binders(p)));
1736-
predicates.extend(implicitly_sized_predicates);
1738+
{
1739+
predicates.extend(
1740+
implicitly_sized_predicates
1741+
.map(|p| make_binders(db,&generics,crate::wrap_empty_binders(p))),
1742+
);
1743+
}
17371744
predicates.into()
17381745
}
17391746

@@ -1745,24 +1752,24 @@ fn implicitly_sized_clauses<'a>(
17451752
explicitly_unsized_tys:&'aFxHashSet<Ty>,
17461753
substitution:&'aSubstitution,
17471754
resolver:&Resolver,
1748-
) -> implIterator<Item = WhereClause> + 'a{
1755+
) -> Option<implIterator<Item = WhereClause> + 'a>{
17491756
let is_trait_def = matches!(def,GenericDefId::TraitId(..));
17501757
let generic_args = &substitution.as_slice(Interner)[is_trait_def asusize..];
17511758
let sized_trait = db
17521759
.lang_item(resolver.krate(),LangItem::Sized)
17531760
.and_then(|lang_item| lang_item.as_trait().map(to_chalk_trait_id));
17541761

1755-
sized_trait.into_iter().flat_map(move |sized_trait| {
1756-
let implicitly_sized_tys = generic_args
1762+
sized_trait.map(move |sized_trait| {
1763+
generic_args
17571764
.iter()
17581765
.filter_map(|generic_arg| generic_arg.ty(Interner))
1759-
.filter(move |&self_ty| !explicitly_unsized_tys.contains(self_ty));
1760-
implicitly_sized_tys.map(move |self_ty| {
1761-
WhereClause::Implemented(TraitRef{
1762-
trait_id: sized_trait,
1763-
substitution:Substitution::from1(Interner, self_ty.clone()),
1766+
.filter(move |&self_ty| !explicitly_unsized_tys.contains(self_ty))
1767+
.map(move |self_ty| {
1768+
WhereClause::Implemented(TraitRef{
1769+
trait_id: sized_trait,
1770+
substitution:Substitution::from1(Interner, self_ty.clone()),
1771+
})
17641772
})
1765-
})
17661773
})
17671774
}
17681775

‎crates/hir-ty/src/tests/display_source_code.rs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ fn render_dyn_for_ty() {
8585
trait Foo<'a> {}
8686
8787
fn foo(foo: &dyn for<'a> Foo<'a>) {}
88-
// ^^^ &dyn Foo<'static>
88+
// ^^^ &dyn Foo<'{error}>
8989
"#,
9090
);
9191
}

‎crates/hir-ty/src/tests/patterns.rs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1109,7 +1109,7 @@ fn var_args() {
11091109
#[lang = "va_list"]
11101110
pub struct VaListImpl<'f>;
11111111
fn my_fn(foo: ...) {}
1112-
//^^^ VaListImpl<'static>
1112+
//^^^ VaListImpl<'{error}>
11131113
"#,
11141114
);
11151115
}

‎crates/hir-ty/src/tests/regression.rs‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -896,13 +896,13 @@ fn flush(&self) {
896896
"#,
897897
expect![[r#"
898898
123..127 'self': &Mutex<T>
899-
150..152 '{}': MutexGuard<'static, T>
899+
150..152 '{}': MutexGuard<'{error}, T>
900900
234..238 'self': &{unknown}
901901
240..290 '{ ...()); }': ()
902902
250..251 'w': &Mutex<BufWriter>
903903
276..287 '*(w.lock())': BufWriter
904904
278..279 'w': &Mutex<BufWriter>
905-
278..286 'w.lock()': MutexGuard<'static, BufWriter>
905+
278..286 'w.lock()': MutexGuard<'{error}, BufWriter>
906906
"#]],
907907
);
908908
}

‎crates/hir-ty/src/tests/simple.rs‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3092,15 +3092,15 @@ fn main() {
30923092
389..394 'boxed': Box<Foo<i32>>
30933093
389..406 'boxed....nner()': &i32
30943094
416..421 'good1': &i32
3095-
424..438 'Foo::get_inner': fn get_inner<i32, 'static>(&Box<Foo<i32>>) -> &i32
3095+
424..438 'Foo::get_inner': fn get_inner<i32, '{error}>(&Box<Foo<i32>>) -> &i32
30963096
424..446 'Foo::g...boxed)': &i32
30973097
439..445 '&boxed': &Box<Foo<i32>>
30983098
440..445 'boxed': Box<Foo<i32>>
30993099
457..461 'bad2': &Foo<i32>
31003100
464..469 'boxed': Box<Foo<i32>>
31013101
464..480 'boxed....self()': &Foo<i32>
31023102
490..495 'good2': &Foo<i32>
3103-
498..511 'Foo::get_self': fn get_self<i32, 'static>(&Box<Foo<i32>>) -> &Foo<i32>
3103+
498..511 'Foo::get_self': fn get_self<i32, '{error}>(&Box<Foo<i32>>) -> &Foo<i32>
31043104
498..519 'Foo::g...boxed)': &Foo<i32>
31053105
512..518 '&boxed': &Box<Foo<i32>>
31063106
513..518 'boxed': Box<Foo<i32>>
@@ -3659,7 +3659,7 @@ fn main() {
36593659
let are = "are";
36603660
let count = 10;
36613661
builtin#format_args("hello {count:02} {} friends, we {are:?} {0}{last}", "fancy", last = "!");
3662-
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ type: Arguments<'static>
3662+
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ type: Arguments<'{error}>
36633663
}
36643664
"#,
36653665
);

‎crates/hir-ty/src/tests/traits.rs‎

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1602,7 +1602,7 @@ fn weird_bounds() {
16021602
r#"
16031603
//- minicore: sized
16041604
trait Trait {}
1605-
fn test(
1605+
fn test<'lifetime>(
16061606
a: impl Trait + 'lifetime,
16071607
b: impl 'lifetime,
16081608
c: impl (Trait),
@@ -1612,13 +1612,13 @@ fn test(
16121612
) {}
16131613
"#,
16141614
expect![[r#"
1615-
28..29 'a': impl Trait + 'static
1616-
59..60 'b': impl 'static
1617-
82..83 'c': impl Trait
1618-
103..104 'd': impl 'static
1619-
128..129 'e': impl ?Sized
1620-
148..149 'f': impl Trait + ?Sized
1621-
173..175 '{}': ()
1615+
39..40 'a': impl Trait + 'lifetime
1616+
70..71 'b': impl 'lifetime
1617+
93..94 'c': impl Trait
1618+
114..115 'd': impl 'lifetime
1619+
139..140 'e': impl ?Sized
1620+
159..160 'f': impl Trait + ?Sized
1621+
184..186 '{}': ()
16221622
"#]],
16231623
);
16241624
}

0 commit comments

Comments
 (0)