Skip to content

Commit 7f7b348

Browse files
committed
Introduce InlineAsmError type
1 parent e22dab3 commit 7f7b348

File tree

2 files changed

+27
-20
lines changed

2 files changed

+27
-20
lines changed

compiler/rustc_codegen_llvm/src/back/write.rs

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ use libc::{c_char, c_int, c_void, size_t};
99
use rustc_codegen_ssa::back::link::ensure_removed;
1010
use rustc_codegen_ssa::back::versioned_llvm_target;
1111
use rustc_codegen_ssa::back::write::{
12-
BitcodeSection, CodegenContext, EmitObj, ModuleConfig, TargetMachineFactoryConfig,
13-
TargetMachineFactoryFn,
12+
BitcodeSection, CodegenContext, EmitObj, InlineAsmError, ModuleConfig,
13+
TargetMachineFactoryConfig, TargetMachineFactoryFn,
1414
};
1515
use rustc_codegen_ssa::base::wants_wasm_eh;
1616
use rustc_codegen_ssa::traits::*;
@@ -434,7 +434,7 @@ fn report_inline_asm(
434434
level: llvm::DiagnosticLevel,
435435
cookie: u64,
436436
source: Option<(String, Vec<InnerSpan>)>,
437-
) {
437+
) -> InlineAsmError {
438438
// In LTO build we may get srcloc values from other crates which are invalid
439439
// since they use a different source map. To be safe we just suppress these
440440
// in LTO builds.
@@ -454,7 +454,7 @@ fn report_inline_asm(
454454
llvm::DiagnosticLevel::Note | llvm::DiagnosticLevel::Remark => Level::Note,
455455
};
456456
let msg = msg.trim_prefix("error: ").to_string();
457-
cgcx.diag_emitter.inline_asm_error(span, msg, level, source);
457+
InlineAsmError { span, msg, level, source }
458458
}
459459

460460
unsafe extern "C" fn diagnostic_handler(info: &DiagnosticInfo, user: *mut c_void) {
@@ -466,7 +466,13 @@ unsafe extern "C" fn diagnostic_handler(info: &DiagnosticInfo, user: *mut c_void
466466

467467
match unsafe { llvm::diagnostic::Diagnostic::unpack(info) } {
468468
llvm::diagnostic::InlineAsm(inline) => {
469-
report_inline_asm(cgcx, inline.message, inline.level, inline.cookie, inline.source);
469+
cgcx.diag_emitter.inline_asm_error(report_inline_asm(
470+
cgcx,
471+
inline.message,
472+
inline.level,
473+
inline.cookie,
474+
inline.source,
475+
));
470476
}
471477

472478
llvm::diagnostic::Optimization(opt) => {

compiler/rustc_codegen_ssa/src/back/write.rs

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1897,10 +1897,17 @@ fn spawn_thin_lto_work<'a, B: ExtraBackendMethods>(
18971897

18981898
enum SharedEmitterMessage {
18991899
Diagnostic(Diagnostic),
1900-
InlineAsmError(SpanData, String, Level, Option<(String, Vec<InnerSpan>)>),
1900+
InlineAsmError(InlineAsmError),
19011901
Fatal(String),
19021902
}
19031903

1904+
pub struct InlineAsmError {
1905+
pub span: SpanData,
1906+
pub msg: String,
1907+
pub level: Level,
1908+
pub source: Option<(String, Vec<InnerSpan>)>,
1909+
}
1910+
19041911
#[derive(Clone)]
19051912
pub struct SharedEmitter {
19061913
sender: Sender<SharedEmitterMessage>,
@@ -1917,14 +1924,8 @@ impl SharedEmitter {
19171924
(SharedEmitter { sender }, SharedEmitterMain { receiver })
19181925
}
19191926

1920-
pub fn inline_asm_error(
1921-
&self,
1922-
span: SpanData,
1923-
msg: String,
1924-
level: Level,
1925-
source: Option<(String, Vec<InnerSpan>)>,
1926-
) {
1927-
drop(self.sender.send(SharedEmitterMessage::InlineAsmError(span, msg, level, source)));
1927+
pub fn inline_asm_error(&self, err: InlineAsmError) {
1928+
drop(self.sender.send(SharedEmitterMessage::InlineAsmError(err)));
19281929
}
19291930

19301931
fn fatal(&self, msg: &str) {
@@ -2007,15 +2008,15 @@ impl SharedEmitterMain {
20072008
dcx.emit_diagnostic(d);
20082009
sess.dcx().abort_if_errors();
20092010
}
2010-
Ok(SharedEmitterMessage::InlineAsmError(span, msg, level, source)) => {
2011-
assert_matches!(level, Level::Error | Level::Warning | Level::Note);
2012-
let mut err = Diag::<()>::new(sess.dcx(), level, msg);
2013-
if !span.is_dummy() {
2014-
err.span(span.span());
2011+
Ok(SharedEmitterMessage::InlineAsmError(inner)) => {
2012+
assert_matches!(inner.level, Level::Error | Level::Warning | Level::Note);
2013+
let mut err = Diag::<()>::new(sess.dcx(), inner.level, inner.msg);
2014+
if !inner.span.is_dummy() {
2015+
err.span(inner.span.span());
20152016
}
20162017

20172018
// Point to the generated assembly if it is available.
2018-
if let Some((buffer, spans)) = source {
2019+
if let Some((buffer, spans)) = inner.source {
20192020
let source = sess
20202021
.source_map()
20212022
.new_source_file(FileName::inline_asm_source_code(&buffer), buffer);

0 commit comments

Comments
 (0)