@@ -117,7 +117,14 @@ impl<'a, 'gcc, 'tcx> AsmBuilderMethods<'tcx> for Builder<'a, 'gcc, 'tcx> {
117117 true
118118 }
119119
120- fn codegen_inline_asm ( & mut self , template : & [ InlineAsmTemplatePiece ] , rust_operands : & [ InlineAsmOperandRef < ' tcx , Self > ] , options : InlineAsmOptions , _span : & [ Span ] , _instance : Instance < ' _ > ) {
120+ fn codegen_inline_asm ( & mut self , template : & [ InlineAsmTemplatePiece ] , rust_operands : & [ InlineAsmOperandRef < ' tcx , Self > ] , options : InlineAsmOptions , span : & [ Span ] , _instance : Instance < ' _ > , _dest_catch_funclet : Option < ( Self :: BasicBlock , Self :: BasicBlock , Option < & Self :: Funclet > ) > ) {
121+ if options. contains ( InlineAsmOptions :: MAY_UNWIND ) {
122+ self . sess ( )
123+ . struct_span_err ( span[ 0 ] , "GCC backend does not support unwinding from inline asm" )
124+ . emit ( ) ;
125+ return ;
126+ }
127+
121128 let asm_arch = self . tcx . sess . asm_arch . unwrap ( ) ;
122129 let is_x86 = matches ! ( asm_arch, InlineAsmArch :: X86 | InlineAsmArch :: X86_64 ) ;
123130 let att_dialect = is_x86 && options. contains ( InlineAsmOptions :: ATT_SYNTAX ) ;
@@ -552,7 +559,6 @@ fn reg_to_gcc(reg: InlineAsmRegOrRegClass) -> ConstraintOrRegister {
552559 InlineAsmRegClass :: AArch64 ( AArch64InlineAsmRegClass :: vreg) => unimplemented ! ( ) ,
553560 InlineAsmRegClass :: AArch64 ( AArch64InlineAsmRegClass :: vreg_low16) => unimplemented ! ( ) ,
554561 InlineAsmRegClass :: Arm ( ArmInlineAsmRegClass :: reg) => unimplemented ! ( ) ,
555- InlineAsmRegClass :: Arm ( ArmInlineAsmRegClass :: reg_thumb) => unimplemented ! ( ) ,
556562 InlineAsmRegClass :: Arm ( ArmInlineAsmRegClass :: sreg)
557563 | InlineAsmRegClass :: Arm ( ArmInlineAsmRegClass :: dreg_low16)
558564 | InlineAsmRegClass :: Arm ( ArmInlineAsmRegClass :: qreg_low8) => unimplemented ! ( ) ,
@@ -561,6 +567,7 @@ fn reg_to_gcc(reg: InlineAsmRegOrRegClass) -> ConstraintOrRegister {
561567 | InlineAsmRegClass :: Arm ( ArmInlineAsmRegClass :: qreg_low4) => unimplemented ! ( ) ,
562568 InlineAsmRegClass :: Arm ( ArmInlineAsmRegClass :: dreg)
563569 | InlineAsmRegClass :: Arm ( ArmInlineAsmRegClass :: qreg) => unimplemented ! ( ) ,
570+ InlineAsmRegClass :: Avr ( _) => unimplemented ! ( ) ,
564571 InlineAsmRegClass :: Bpf ( _) => unimplemented ! ( ) ,
565572 InlineAsmRegClass :: Hexagon ( HexagonInlineAsmRegClass :: reg) => unimplemented ! ( ) ,
566573 InlineAsmRegClass :: Mips ( MipsInlineAsmRegClass :: reg) => unimplemented ! ( ) ,
@@ -611,8 +618,7 @@ fn dummy_output_type<'gcc, 'tcx>(cx: &CodegenCx<'gcc, 'tcx>, reg: InlineAsmRegCl
611618 | InlineAsmRegClass :: AArch64 ( AArch64InlineAsmRegClass :: vreg_low16) => {
612619 unimplemented ! ( )
613620 }
614- InlineAsmRegClass :: Arm ( ArmInlineAsmRegClass :: reg)
615- | InlineAsmRegClass :: Arm ( ArmInlineAsmRegClass :: reg_thumb) => cx. type_i32 ( ) ,
621+ InlineAsmRegClass :: Arm ( ArmInlineAsmRegClass :: reg) => cx. type_i32 ( ) ,
616622 InlineAsmRegClass :: Arm ( ArmInlineAsmRegClass :: sreg)
617623 | InlineAsmRegClass :: Arm ( ArmInlineAsmRegClass :: sreg_low16) => cx. type_f32 ( ) ,
618624 InlineAsmRegClass :: Arm ( ArmInlineAsmRegClass :: dreg)
@@ -623,6 +629,7 @@ fn dummy_output_type<'gcc, 'tcx>(cx: &CodegenCx<'gcc, 'tcx>, reg: InlineAsmRegCl
623629 | InlineAsmRegClass :: Arm ( ArmInlineAsmRegClass :: qreg_low4) => {
624630 unimplemented ! ( )
625631 }
632+ InlineAsmRegClass :: Avr ( _) => unimplemented ! ( ) ,
626633 InlineAsmRegClass :: Bpf ( _) => unimplemented ! ( ) ,
627634 InlineAsmRegClass :: Hexagon ( HexagonInlineAsmRegClass :: reg) => cx. type_i32 ( ) ,
628635 InlineAsmRegClass :: Mips ( MipsInlineAsmRegClass :: reg) => cx. type_i32 ( ) ,
@@ -719,8 +726,7 @@ fn modifier_to_gcc(arch: InlineAsmArch, reg: InlineAsmRegClass, modifier: Option
719726 | InlineAsmRegClass :: AArch64 ( AArch64InlineAsmRegClass :: vreg_low16) => {
720727 unimplemented ! ( )
721728 }
722- InlineAsmRegClass :: Arm ( ArmInlineAsmRegClass :: reg)
723- | InlineAsmRegClass :: Arm ( ArmInlineAsmRegClass :: reg_thumb) => unimplemented ! ( ) ,
729+ InlineAsmRegClass :: Arm ( ArmInlineAsmRegClass :: reg) => unimplemented ! ( ) ,
724730 InlineAsmRegClass :: Arm ( ArmInlineAsmRegClass :: sreg)
725731 | InlineAsmRegClass :: Arm ( ArmInlineAsmRegClass :: sreg_low16) => unimplemented ! ( ) ,
726732 InlineAsmRegClass :: Arm ( ArmInlineAsmRegClass :: dreg)
@@ -731,6 +737,7 @@ fn modifier_to_gcc(arch: InlineAsmArch, reg: InlineAsmRegClass, modifier: Option
731737 | InlineAsmRegClass :: Arm ( ArmInlineAsmRegClass :: qreg_low4) => {
732738 unimplemented ! ( )
733739 }
740+ InlineAsmRegClass :: Avr ( _) => unimplemented ! ( ) ,
734741 InlineAsmRegClass :: Bpf ( _) => unimplemented ! ( ) ,
735742 InlineAsmRegClass :: Hexagon ( _) => unimplemented ! ( ) ,
736743 InlineAsmRegClass :: Mips ( _) => unimplemented ! ( ) ,
0 commit comments