@@ -19,7 +19,7 @@ struct AsmArgs {
1919 operands : Vec < ( ast:: InlineAsmOperand , Span ) > ,
2020 named_args : FxHashMap < Symbol , usize > ,
2121 reg_args : FxHashSet < usize > ,
22- clobber_abi : Option < ( Symbol , Span ) > ,
22+ clobber_abis : Vec < ( Symbol , Span ) > ,
2323 options : ast:: InlineAsmOptions ,
2424 options_spans : Vec < Span > ,
2525}
@@ -64,7 +64,7 @@ fn parse_args<'a>(
6464 operands : vec ! [ ] ,
6565 named_args : FxHashMap :: default ( ) ,
6666 reg_args : FxHashSet :: default ( ) ,
67- clobber_abi : None ,
67+ clobber_abis : Vec :: new ( ) ,
6868 options : ast:: InlineAsmOptions :: empty ( ) ,
6969 options_spans : vec ! [ ] ,
7070 } ;
@@ -210,7 +210,7 @@ fn parse_args<'a>(
210210 . span_labels ( args. options_spans . clone ( ) , "previous options" )
211211 . span_label ( span, "argument" )
212212 . emit ( ) ;
213- } else if let Some ( ( _, abi_span) ) = args. clobber_abi {
213+ } else if let Some ( & ( _, abi_span) ) = args. clobber_abis . last ( ) {
214214 ecx. struct_span_err ( span, "arguments are not allowed after clobber_abi" )
215215 . span_label ( abi_span, "clobber_abi" )
216216 . span_label ( span, "argument" )
@@ -322,7 +322,7 @@ fn parse_args<'a>(
322322 // Bail out now since this is likely to confuse MIR
323323 return Err ( err) ;
324324 }
325- if let Some ( ( _, abi_span) ) = args. clobber_abi {
325+ if let Some ( & ( _, abi_span) ) = args. clobber_abis . last ( ) {
326326 if is_global_asm {
327327 let err =
328328 ecx. struct_span_err ( abi_span, "`clobber_abi` cannot be used with `global_asm!`" ) ;
@@ -453,14 +453,7 @@ fn parse_clobber_abi<'a>(
453453
454454 let new_span = span_start. to ( p. prev_token . span ) ;
455455
456- if let Some ( ( _, prev_span) ) = args. clobber_abi {
457- let mut err = p
458- . sess
459- . span_diagnostic
460- . struct_span_err ( new_span, "clobber_abi specified multiple times" ) ;
461- err. span_label ( prev_span, "clobber_abi previously specified here" ) ;
462- return Err ( err) ;
463- } else if !args. options_spans . is_empty ( ) {
456+ if !args. options_spans . is_empty ( ) {
464457 let mut err = p
465458 . sess
466459 . span_diagnostic
@@ -469,7 +462,7 @@ fn parse_clobber_abi<'a>(
469462 return Err ( err) ;
470463 }
471464
472- args. clobber_abi = Some ( ( clobber_abi, new_span) ) ;
465+ args. clobber_abis . push ( ( clobber_abi, new_span) ) ;
473466
474467 Ok ( ( ) )
475468}
@@ -770,7 +763,7 @@ fn expand_preparsed_asm(ecx: &mut ExtCtxt<'_>, args: AsmArgs) -> Option<ast::Inl
770763 template,
771764 template_strs : template_strs. into_boxed_slice ( ) ,
772765 operands : args. operands ,
773- clobber_abi : args. clobber_abi ,
766+ clobber_abis : args. clobber_abis ,
774767 options : args. options ,
775768 line_spans,
776769 } )
0 commit comments