@@ -53,6 +53,7 @@ use ty::BindingMode;
5353use ty:: CanonicalTy ;
5454use util:: nodemap:: { DefIdSet , ItemLocalMap } ;
5555use util:: nodemap:: { FxHashMap , FxHashSet } ;
56+ use rustc_target:: spec:: VaListKind ;
5657use rustc_data_structures:: accumulate_vec:: AccumulateVec ;
5758use rustc_data_structures:: stable_hasher:: { HashStable , hash_stable_hashmap,
5859 StableHasher , StableHasherResult ,
@@ -2694,6 +2695,34 @@ impl<'a, 'gcx, 'tcx> TyCtxt<'a, 'gcx, 'tcx> {
26942695 self . object_lifetime_defaults_map ( id. owner )
26952696 . and_then ( |map| map. get ( & id. local_id ) . cloned ( ) )
26962697 }
2698+
2699+ pub fn va_list_types ( & self ) -> Vec < Ty < ' tcx > > {
2700+ match self . sess . target . target . options . va_list_kind {
2701+ VaListKind :: CharPtr | VaListKind :: VoidPtr => {
2702+ vec ! [ self . mk_mut_ptr( self . types. i8 ) ]
2703+ }
2704+ VaListKind :: X86_64Abi => {
2705+ vec ! [ self . types. i32 ,
2706+ self . types. i32 ,
2707+ self . mk_mut_ptr( self . types. i8 ) ,
2708+ self . mk_mut_ptr( self . types. i8 ) ]
2709+ }
2710+ VaListKind :: AArch64Abi => {
2711+ vec ! [ self . mk_mut_ptr( self . types. i8 ) ,
2712+ self . mk_mut_ptr( self . types. i8 ) ,
2713+ self . mk_mut_ptr( self . types. i8 ) ,
2714+ self . types. i32 ,
2715+ self . types. i32 ]
2716+ }
2717+ VaListKind :: PowerPcAbi => {
2718+ vec ! [ self . types. i8 ,
2719+ self . types. i8 ,
2720+ self . types. i16 ,
2721+ self . mk_mut_ptr( self . types. i8 ) ,
2722+ self . mk_mut_ptr( self . types. i8 ) ]
2723+ }
2724+ }
2725+ }
26972726}
26982727
26992728pub trait InternAs < T : ?Sized , R > {
0 commit comments