@@ -696,36 +696,38 @@ impl<'a> AstValidator<'a> {
696696
697697 match fn_ctxt {
698698 FnCtxt :: Foreign => return ,
699- FnCtxt :: Free => match sig. header . ext {
700- Extern :: Implicit ( _) => {
701- if !matches ! ( sig. header. safety, Safety :: Unsafe ( _) ) {
702- self . dcx ( ) . emit_err ( errors:: CVariadicMustBeUnsafe {
703- span : variadic_param. span ,
704- unsafe_span : sig. safety_span ( ) ,
705- } ) ;
706- }
707- }
708- Extern :: Explicit ( StrLit { symbol_unescaped, .. } , _) => {
709- if !matches ! ( symbol_unescaped, sym:: C | sym:: C_dash_unwind ) {
710- self . dcx ( ) . emit_err ( errors:: CVariadicBadExtern {
711- span : variadic_param. span ,
712- abi : symbol_unescaped,
713- extern_span : sig. extern_span ( ) ,
714- } ) ;
699+ FnCtxt :: Free | FnCtxt :: Assoc ( AssocCtxt :: Impl { of_trait : false } ) => {
700+ match sig. header . ext {
701+ Extern :: Implicit ( _) => {
702+ if !matches ! ( sig. header. safety, Safety :: Unsafe ( _) ) {
703+ self . dcx ( ) . emit_err ( errors:: CVariadicMustBeUnsafe {
704+ span : variadic_param. span ,
705+ unsafe_span : sig. safety_span ( ) ,
706+ } ) ;
707+ }
715708 }
709+ Extern :: Explicit ( StrLit { symbol_unescaped, .. } , _) => {
710+ if !matches ! ( symbol_unescaped, sym:: C | sym:: C_dash_unwind ) {
711+ self . dcx ( ) . emit_err ( errors:: CVariadicBadExtern {
712+ span : variadic_param. span ,
713+ abi : symbol_unescaped,
714+ extern_span : sig. extern_span ( ) ,
715+ } ) ;
716+ }
716717
717- if !matches ! ( sig. header. safety, Safety :: Unsafe ( _) ) {
718- self . dcx ( ) . emit_err ( errors:: CVariadicMustBeUnsafe {
719- span : variadic_param. span ,
720- unsafe_span : sig. safety_span ( ) ,
721- } ) ;
718+ if !matches ! ( sig. header. safety, Safety :: Unsafe ( _) ) {
719+ self . dcx ( ) . emit_err ( errors:: CVariadicMustBeUnsafe {
720+ span : variadic_param. span ,
721+ unsafe_span : sig. safety_span ( ) ,
722+ } ) ;
723+ }
724+ }
725+ Extern :: None => {
726+ let err = errors:: CVariadicNoExtern { span : variadic_param. span } ;
727+ self . dcx ( ) . emit_err ( err) ;
722728 }
723729 }
724- Extern :: None => {
725- let err = errors:: CVariadicNoExtern { span : variadic_param. span } ;
726- self . dcx ( ) . emit_err ( err) ;
727- }
728- } ,
730+ }
729731 FnCtxt :: Assoc ( _) => {
730732 // For now, C variable argument lists are unsupported in associated functions.
731733 let err = errors:: CVariadicAssociatedFunction { span : variadic_param. span } ;
0 commit comments