Skip to content

Commit

Permalink
Fix up error message for debug_assert_args_compat for IATs
Browse files Browse the repository at this point in the history
  • Loading branch information
compiler-errors committed Mar 30, 2024
1 parent 5bd0be8 commit f31dd6b
Showing 1 changed file with 19 additions and 3 deletions.
22 changes: 19 additions & 3 deletions compiler/rustc_middle/src/ty/context.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2009,7 +2009,10 @@ impl<'tcx> TyCtxt<'tcx> {
true
}

/// With `cfg(debug_assertions)`, assert that args are compatible with their generics,
/// and print out the args if not.
pub fn debug_assert_args_compatible(self, def_id: DefId, args: &'tcx [ty::GenericArg<'tcx>]) {
// Fast-path for non-debug, bail out early.
#[cfg(not(debug_assertions))]
{
return;
Expand All @@ -2019,7 +2022,20 @@ impl<'tcx> TyCtxt<'tcx> {
if let DefKind::AssocTy = self.def_kind(def_id)
&& let DefKind::Impl { of_trait: false } = self.def_kind(self.parent(def_id))
{
bug!()
bug!(
"args not compatible with generics for {}: args={:#?}, generics={:#?}",
self.def_path_str(def_id),
args,
// Make `[Self, GAT_ARGS...]` (this could be simplified)
self.mk_args_from_iter(
[self.types.self_param.into()].into_iter().chain(
self.generics_of(def_id)
.own_args(ty::GenericArgs::identity_for_item(self, def_id))
.iter()
.copied()
)
)
);
} else {
bug!(
"args not compatible with generics for {}: args={:#?}, generics={:#?}",
Expand All @@ -2034,11 +2050,11 @@ impl<'tcx> TyCtxt<'tcx> {
#[inline(always)]
pub(crate) fn check_and_mk_args(
self,
_def_id: DefId,
def_id: DefId,
args: impl IntoIterator<Item: Into<GenericArg<'tcx>>>,
) -> GenericArgsRef<'tcx> {
let args = self.mk_args_from_iter(args.into_iter().map(Into::into));
self.debug_assert_args_compatible(_def_id, args);
self.debug_assert_args_compatible(def_id, args);
args
}

Expand Down

0 comments on commit f31dd6b

Please sign in to comment.