Skip to content

Commit 32203e8

Browse files
committed
Recover and ignore query cycles for unused_generic_params
1 parent 68fa840 commit 32203e8

File tree

5 files changed

+18
-0
lines changed

5 files changed

+18
-0
lines changed

compiler/rustc_macros/src/query.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,9 @@ struct QueryModifiers {
9797
/// A cycle error results in a delay_bug call
9898
cycle_delay_bug: Option<Ident>,
9999

100+
/// A cycle error will not be reported.
101+
recover_cycle: Option<Ident>,
102+
100103
/// Don't hash the result, instead just mark a query red if it runs
101104
no_hash: Option<Ident>,
102105

@@ -125,6 +128,7 @@ fn parse_query_modifiers(input: ParseStream<'_>) -> Result<QueryModifiers> {
125128
let mut desc = None;
126129
let mut fatal_cycle = None;
127130
let mut cycle_delay_bug = None;
131+
let mut recover_cycle = None;
128132
let mut no_hash = None;
129133
let mut anon = None;
130134
let mut eval_always = None;
@@ -179,6 +183,8 @@ fn parse_query_modifiers(input: ParseStream<'_>) -> Result<QueryModifiers> {
179183
try_insert!(fatal_cycle = modifier);
180184
} else if modifier == "cycle_delay_bug" {
181185
try_insert!(cycle_delay_bug = modifier);
186+
} else if modifier == "recover_cycle" {
187+
try_insert!(recover_cycle = modifier);
182188
} else if modifier == "no_hash" {
183189
try_insert!(no_hash = modifier);
184190
} else if modifier == "anon" {
@@ -206,6 +212,7 @@ fn parse_query_modifiers(input: ParseStream<'_>) -> Result<QueryModifiers> {
206212
desc,
207213
fatal_cycle,
208214
cycle_delay_bug,
215+
recover_cycle,
209216
no_hash,
210217
anon,
211218
eval_always,
@@ -327,6 +334,7 @@ pub fn rustc_queries(input: TokenStream) -> TokenStream {
327334
fatal_cycle,
328335
arena_cache,
329336
cycle_delay_bug,
337+
recover_cycle,
330338
no_hash,
331339
anon,
332340
eval_always,

compiler/rustc_middle/src/query/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1846,6 +1846,7 @@ rustc_queries! {
18461846
tcx.def_path_str(key.def_id())
18471847
}
18481848
separate_provide_extern
1849+
recover_cycle
18491850
}
18501851

18511852
query backend_optimization_level(_: ()) -> OptLevel {

compiler/rustc_query_impl/src/plumbing.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,9 @@ macro_rules! handle_cycle_error {
205205
([]) => {{
206206
rustc_query_system::HandleCycleError::Error
207207
}};
208+
([(recover_cycle) $($rest:tt)*]) => {{
209+
rustc_query_system::HandleCycleError::Recover
210+
}};
208211
([(fatal_cycle) $($rest:tt)*]) => {{
209212
rustc_query_system::HandleCycleError::Fatal
210213
}};

compiler/rustc_query_system/src/error.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ pub struct CycleStack {
1212

1313
#[derive(Copy, Clone)]
1414
pub enum HandleCycleError {
15+
Recover,
1516
Error,
1617
Fatal,
1718
DelayBug,

compiler/rustc_query_system/src/query/plumbing.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,11 @@ where
162162
error.delay_as_bug();
163163
Value::from_cycle_error(tcx, &cycle_error.cycle)
164164
}
165+
Recover => {
166+
// FIXME: We don't really want to create the error in the first place.
167+
error.cancel();
168+
Value::from_cycle_error(tcx, &cycle_error.cycle)
169+
}
165170
}
166171
}
167172

0 commit comments

Comments
 (0)