Skip to content

Commit 6804a21

Browse files
committed
feat: made diagbacktraces feature automatically enable rust backtraces when used
1 parent 47d3b9a commit 6804a21

2 files changed

Lines changed: 18 additions & 5 deletions

File tree

compiler/compiler_main/Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,5 @@ diagnostics = { path = "../diagnostics" }
1313
compiler_utils = { path = "../compiler_utils" }
1414

1515
[features]
16-
llvm = ["llvm_ir_bridge"]
16+
llvm = ["llvm_ir_bridge"]
17+
diagbacktraces = ["diagnostics/compiler_diagbacktraces"]

compiler/diagnostics/src/diagnostic.rs

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,12 @@ pub struct Diagnostic {
7777

7878
impl Clone for Diagnostic {
7979
fn clone(&self) -> Self {
80-
#[cfg(feature = "compiler_diagbacktraces")]
81-
return Diagnostic { level: self.level.clone(), code: self.code, message: self.message.clone(), primary_span: self.primary_span.clone(), spans: self.spans.clone(), note: self.note.clone(), help: self.help.clone(), backtrace: Diagnostic::capture_backtrace() };
80+
#[cfg(feature = "compiler_diagbacktraces")]
81+
unsafe { std::env::set_var("RUST_BACKTRACE", "1"); }
82+
83+
#[cfg(feature = "compiler_diagbacktraces")]
84+
return Diagnostic { level: self.level.clone(), code: self.code, message: self.message.clone(), primary_span: self.primary_span.clone(), spans: self.spans.clone(), note: self.note.clone(), help: self.help.clone(), backtrace: Backtrace::capture() };
85+
8286

8387
#[cfg(not(feature = "compiler_diagbacktraces"))]
8488
return Diagnostic { level: self.level.clone(), code: self.code, message: self.message.clone(), primary_span: self.primary_span.clone(), spans: self.spans.clone(), note: self.note.clone(), help: self.help.clone() };
@@ -87,9 +91,13 @@ impl Clone for Diagnostic {
8791

8892
impl Diagnostic {
8993
pub fn new(level: Level, decl: (usize, &str), primary_span: Span, spans: Vec<Span>, note: Vec<String>, help: Vec<String>) -> Self {
90-
#[cfg(feature = "compiler_diagbacktraces")]
94+
#[cfg(feature = "compiler_diagbacktraces")]
95+
unsafe { std::env::set_var("RUST_BACKTRACE", "1"); }
96+
97+
#[cfg(feature = "compiler_diagbacktraces")]
9198
let d = Diagnostic { level, code: decl.0, message: decl.1.to_string(), primary_span, spans, note, help, backtrace: Backtrace::capture() };
9299

100+
93101
#[cfg(not(feature = "compiler_diagbacktraces"))]
94102
let d = Diagnostic { level, code: decl.0, message: decl.1.to_string(), primary_span, spans, note, help };
95103

@@ -99,8 +107,12 @@ impl Diagnostic {
99107
}
100108

101109
pub fn new_base(level: Level, code: usize, message: String, primary_span: Span, spans: Vec<Span>, note: Vec<String>, help: Vec<String>) -> Self {
102-
#[cfg(feature = "compiler_diagbacktraces")]
110+
#[cfg(feature = "compiler_diagbacktraces")]
111+
unsafe { std::env::set_var("RUST_BACKTRACE", "1"); }
112+
113+
#[cfg(feature = "compiler_diagbacktraces")]
103114
let d = Diagnostic { level, code, message, primary_span, spans, note, help, backtrace: Backtrace::capture() };
115+
104116

105117
#[cfg(not(feature = "compiler_diagbacktraces"))]
106118
let d = Diagnostic { level, code, message, primary_span, spans, note, help };

0 commit comments

Comments
 (0)