Add UnwindingInlineAsm

This commit is contained in:
Ellis Hoag 2022-08-26 20:44:44 -07:00
parent 7e00a48305
commit d9aa635969
3 changed files with 13 additions and 2 deletions

View File

@ -12,6 +12,7 @@ use std::borrow::Cow;
use crate::builder::Builder; use crate::builder::Builder;
use crate::context::CodegenCx; use crate::context::CodegenCx;
use crate::errors::UnwindingInlineAsm;
use crate::type_of::LayoutGccExt; use crate::type_of::LayoutGccExt;
use crate::callee::get_fn; use crate::callee::get_fn;
@ -109,7 +110,7 @@ impl<'a, 'gcc, 'tcx> AsmBuilderMethods<'tcx> for Builder<'a, 'gcc, 'tcx> {
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>)>) { 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>)>) {
if options.contains(InlineAsmOptions::MAY_UNWIND) { if options.contains(InlineAsmOptions::MAY_UNWIND) {
self.sess() self.sess()
.struct_span_err(span[0], "GCC backend does not support unwinding from inline asm") .create_err(UnwindingInlineAsm { span: span[0] })
.emit(); .emit();
return; return;
} }

View File

@ -13,3 +13,10 @@ pub(crate) struct LinkageConstOrMutType {
#[primary_span] #[primary_span]
pub span: Span pub span: Span
} }
#[derive(SessionDiagnostic)]
#[diag(codegen_gcc::unwinding_inline_asm)]
pub(crate) struct UnwindingInlineAsm {
#[primary_span]
pub span: Span
}

View File

@ -3,3 +3,6 @@ codegen_gcc_ranlib_failure =
codegen_gcc_linkage_const_or_mut_type = codegen_gcc_linkage_const_or_mut_type =
must have type `*const T` or `*mut T` due to `#[linkage]` attribute must have type `*const T` or `*mut T` due to `#[linkage]` attribute
codegen_gcc_unwinding_inline_asm =
GCC backend does not support unwinding from inline asm