Rollup merge of #131049 - compiler-errors:more-validation, r=spastorino
Validate args are correct for `UnevaluatedConst`, `ExistentialTraitRef`/`ExistentialProjection` For the `Existential*` ones, we have to do some adjustment to the args list to deal with the missing `Self` type, so we introduce a `debug_assert_existential_args_compatible` function to the interner as well.
This commit is contained in:
commit
3f15d296f4
11 changed files with 104 additions and 32 deletions
|
@ -279,6 +279,26 @@ impl<'tcx> Interner for TyCtxt<'tcx> {
|
|||
self.debug_assert_args_compatible(def_id, args);
|
||||
}
|
||||
|
||||
/// Assert that the args from an `ExistentialTraitRef` or `ExistentialProjection`
|
||||
/// are compatible with the `DefId`. Since we're missing a `Self` type, stick on
|
||||
/// a dummy self type and forward to `debug_assert_args_compatible`.
|
||||
fn debug_assert_existential_args_compatible(
|
||||
self,
|
||||
def_id: Self::DefId,
|
||||
args: Self::GenericArgs,
|
||||
) {
|
||||
// FIXME: We could perhaps add a `skip: usize` to `debug_assert_args_compatible`
|
||||
// to avoid needing to reintern the set of args...
|
||||
if cfg!(debug_assertions) {
|
||||
self.debug_assert_args_compatible(
|
||||
def_id,
|
||||
self.mk_args_from_iter(
|
||||
[self.types.trait_object_dummy_self.into()].into_iter().chain(args.iter()),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
fn mk_type_list_from_iter<I, T>(self, args: I) -> T::Output
|
||||
where
|
||||
I: Iterator<Item = T>,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue