@@ -2009,34 +2009,50 @@ impl<'tcx> TyCtxt<'tcx> {
2009
2009
true
2010
2010
}
2011
2011
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
+ }
2025
2044
}
2026
2045
}
2027
2046
}
2028
2047
2029
2048
#[ inline( always) ]
2030
2049
pub ( crate ) fn check_and_mk_args (
2031
2050
self ,
2032
- _def_id : DefId ,
2051
+ def_id : DefId ,
2033
2052
args : impl IntoIterator < Item : Into < GenericArg < ' tcx > > > ,
2034
2053
) -> GenericArgsRef < ' tcx > {
2035
2054
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) ;
2040
2056
args
2041
2057
}
2042
2058
0 commit comments