@@ -2009,34 +2009,50 @@ impl<'tcx> TyCtxt<'tcx> {
20092009 true
20102010 }
20112011
2012- pub fn assert_args_compatible ( self , def_id : DefId , args : & ' tcx [ ty:: GenericArg < ' tcx > ] ) {
2013- if !self . check_args_compatible ( def_id, args) {
2014- if let DefKind :: AssocTy = self . def_kind ( def_id)
2015- && let DefKind :: Impl { of_trait : false } = self . def_kind ( self . parent ( def_id) )
2016- {
2017- bug ! ( )
2018- } else {
2019- bug ! (
2020- "args not compatible with generics for {}: args={:#?}, generics={:#?}" ,
2021- self . def_path_str( def_id) ,
2022- args,
2023- ty:: GenericArgs :: identity_for_item( self , def_id)
2024- ) ;
2012+ /// With `cfg(debug_assertions)`, assert that args are compatible with their generics,
2013+ /// and print out the args if not.
2014+ #[ cfg_attr( not( debug_assertions) , allow( unused_variables) ) ]
2015+ pub fn debug_assert_args_compatible ( self , def_id : DefId , args : & ' tcx [ ty:: GenericArg < ' tcx > ] ) {
2016+ #[ cfg( debug_assertions) ]
2017+ {
2018+ if !self . check_args_compatible ( def_id, args) {
2019+ if let DefKind :: AssocTy = self . def_kind ( def_id)
2020+ && let DefKind :: Impl { of_trait : false } = self . def_kind ( self . parent ( def_id) )
2021+ {
2022+ bug ! (
2023+ "args not compatible with generics for {}: args={:#?}, generics={:#?}" ,
2024+ self . def_path_str( def_id) ,
2025+ args,
2026+ // Make `[Self, GAT_ARGS...]` (this could be simplified)
2027+ self . mk_args_from_iter(
2028+ [ self . types. self_param. into( ) ] . into_iter( ) . chain(
2029+ self . generics_of( def_id)
2030+ . own_args( ty:: GenericArgs :: identity_for_item( self , def_id) )
2031+ . iter( )
2032+ . copied( )
2033+ )
2034+ )
2035+ ) ;
2036+ } else {
2037+ bug ! (
2038+ "args not compatible with generics for {}: args={:#?}, generics={:#?}" ,
2039+ self . def_path_str( def_id) ,
2040+ args,
2041+ ty:: GenericArgs :: identity_for_item( self , def_id)
2042+ ) ;
2043+ }
20252044 }
20262045 }
20272046 }
20282047
20292048 #[ inline( always) ]
20302049 pub ( crate ) fn check_and_mk_args (
20312050 self ,
2032- _def_id : DefId ,
2051+ def_id : DefId ,
20332052 args : impl IntoIterator < Item : Into < GenericArg < ' tcx > > > ,
20342053 ) -> GenericArgsRef < ' tcx > {
20352054 let args = self . mk_args_from_iter ( args. into_iter ( ) . map ( Into :: into) ) ;
2036- #[ cfg( debug_assertions) ]
2037- {
2038- self . assert_args_compatible ( _def_id, args) ;
2039- }
2055+ self . debug_assert_args_compatible ( def_id, args) ;
20402056 args
20412057 }
20422058
0 commit comments