@@ -9,7 +9,9 @@ use std::cell::{Cell, RefCell};
99use std:: { iter, sync:: Arc } ;
1010
1111use base_db:: CrateId ;
12- use chalk_ir:: { cast:: Cast , fold:: Shift , interner:: HasInterner , Mutability , Safety } ;
12+ use chalk_ir:: {
13+ cast:: Cast , fold:: Shift , interner:: HasInterner , Mutability , Safety , Scalar , UintTy ,
14+ } ;
1315use hir_def:: {
1416 adt:: StructKind ,
1517 body:: { Expander , LowerCtx } ,
@@ -30,16 +32,15 @@ use syntax::ast;
3032
3133use crate :: {
3234 db:: HirDatabase ,
33- dummy_usize_const,
3435 mapping:: ToChalk ,
3536 static_lifetime, to_assoc_type_id, to_chalk_trait_id, to_placeholder_idx,
3637 utils:: {
3738 all_super_trait_refs, associated_type_by_name_including_super_traits, generics, Generics ,
3839 } ,
39- AliasEq , AliasTy , Binders , BoundVar , CallableSig , DebruijnIndex , DynTy , FnPointer , FnSig ,
40- FnSubst , ImplTraitId , Interner , OpaqueTy , PolyFnSig , ProjectionTy , QuantifiedWhereClause ,
41- QuantifiedWhereClauses , ReturnTypeImplTrait , ReturnTypeImplTraits , Substitution ,
42- TraitEnvironment , TraitRef , TraitRefExt , Ty , TyBuilder , TyKind , WhereClause ,
40+ AliasEq , AliasTy , Binders , BoundVar , CallableSig , ConstData , ConstValue , DebruijnIndex , DynTy ,
41+ FnPointer , FnSig , FnSubst , ImplTraitId , Interner , OpaqueTy , PolyFnSig , ProjectionTy ,
42+ QuantifiedWhereClause , QuantifiedWhereClauses , ReturnTypeImplTrait , ReturnTypeImplTraits ,
43+ Substitution , TraitEnvironment , TraitRef , TraitRefExt , Ty , TyBuilder , TyKind , WhereClause ,
4344} ;
4445
4546#[ derive( Debug ) ]
@@ -172,11 +173,16 @@ impl<'a> TyLoweringContext<'a> {
172173 let inner_ty = self . lower_ty ( inner) ;
173174 TyKind :: Raw ( lower_to_chalk_mutability ( * mutability) , inner_ty) . intern ( & Interner )
174175 }
175- TypeRef :: Array ( inner) => {
176+ TypeRef :: Array ( inner, len ) => {
176177 let inner_ty = self . lower_ty ( inner) ;
177- // FIXME: we don't have length info here because we don't store an expression for
178- // the length
179- TyKind :: Array ( inner_ty, dummy_usize_const ( ) ) . intern ( & Interner )
178+
179+ let const_len = ConstData {
180+ ty : TyKind :: Scalar ( Scalar :: Uint ( UintTy :: Usize ) ) . intern ( & Interner ) ,
181+ value : ConstValue :: Concrete ( chalk_ir:: ConcreteConst { interned : * len } ) ,
182+ }
183+ . intern ( & Interner ) ;
184+
185+ TyKind :: Array ( inner_ty, const_len) . intern ( & Interner )
180186 }
181187 TypeRef :: Slice ( inner) => {
182188 let inner_ty = self . lower_ty ( inner) ;
0 commit comments