Rollup merge of #81922 - magurotuna:issue81522, r=matthewjasper
Let `#[allow(unstable_name_collisions)]` work for things other than function Fixes #81522 In addition to the report in #81522, currently `#[allow(unstable_name_collisions)]` doesn't suppress the corresponding diagnostics even if this attribute is appended to an expression statement or a let statement. It seems like this is because the wrong `HirId` is passed to `struct_span_lint_hir`. It's fixed in this PR, and a regression test for it is also added.
This commit is contained in:
commit
54ea8e1b82
@ -83,6 +83,8 @@ struct ProbeContext<'a, 'tcx> {
|
||||
unsatisfied_predicates: Vec<(ty::Predicate<'tcx>, Option<ty::Predicate<'tcx>>)>,
|
||||
|
||||
is_suggestion: IsSuggestion,
|
||||
|
||||
scope_expr_id: hir::HirId,
|
||||
}
|
||||
|
||||
impl<'a, 'tcx> Deref for ProbeContext<'a, 'tcx> {
|
||||
@ -448,6 +450,7 @@ fn probe_op<OP, R>(
|
||||
orig_values,
|
||||
steps.steps,
|
||||
is_suggestion,
|
||||
scope_expr_id,
|
||||
);
|
||||
|
||||
probe_cx.assemble_inherent_candidates();
|
||||
@ -547,6 +550,7 @@ fn new(
|
||||
orig_steps_var_values: OriginalQueryValues<'tcx>,
|
||||
steps: Lrc<Vec<CandidateStep<'tcx>>>,
|
||||
is_suggestion: IsSuggestion,
|
||||
scope_expr_id: hir::HirId,
|
||||
) -> ProbeContext<'a, 'tcx> {
|
||||
ProbeContext {
|
||||
fcx,
|
||||
@ -564,6 +568,7 @@ fn new(
|
||||
private_candidate: None,
|
||||
unsatisfied_predicates: Vec::new(),
|
||||
is_suggestion,
|
||||
scope_expr_id,
|
||||
}
|
||||
}
|
||||
|
||||
@ -1312,7 +1317,7 @@ fn emit_unstable_name_collision_hint(
|
||||
) {
|
||||
self.tcx.struct_span_lint_hir(
|
||||
lint::builtin::UNSTABLE_NAME_COLLISIONS,
|
||||
self.fcx.body_id,
|
||||
self.scope_expr_id,
|
||||
self.span,
|
||||
|lint| {
|
||||
let def_kind = stable_pick.item.kind.as_def_kind();
|
||||
@ -1594,6 +1599,7 @@ fn probe_for_lev_candidate(&mut self) -> Result<Option<ty::AssocItem>, MethodErr
|
||||
self.orig_steps_var_values.clone(),
|
||||
steps,
|
||||
IsSuggestion(true),
|
||||
self.scope_expr_id,
|
||||
);
|
||||
pcx.allow_similar_names = true;
|
||||
pcx.assemble_inherent_candidates();
|
||||
|
31
src/test/ui/inference/issue-81522.rs
Normal file
31
src/test/ui/inference/issue-81522.rs
Normal file
@ -0,0 +1,31 @@
|
||||
// Regression test for #81522.
|
||||
// Ensures that `#[allow(unstable_name_collisions)]` appended to things other than function
|
||||
// suppresses the corresponding diagnostics emitted from inside them.
|
||||
// But note that this attribute doesn't work for macro invocations if it is appended directly.
|
||||
|
||||
// aux-build:inference_unstable_iterator.rs
|
||||
// aux-build:inference_unstable_itertools.rs
|
||||
// run-pass
|
||||
|
||||
extern crate inference_unstable_iterator;
|
||||
extern crate inference_unstable_itertools;
|
||||
|
||||
#[allow(unused_imports)]
|
||||
use inference_unstable_iterator::IpuIterator;
|
||||
use inference_unstable_itertools::IpuItertools;
|
||||
|
||||
fn main() {
|
||||
// expression statement
|
||||
#[allow(unstable_name_collisions)]
|
||||
'x'.ipu_flatten();
|
||||
|
||||
// let statement
|
||||
#[allow(unstable_name_collisions)]
|
||||
let _ = 'x'.ipu_flatten();
|
||||
|
||||
// block expression
|
||||
#[allow(unstable_name_collisions)]
|
||||
{
|
||||
'x'.ipu_flatten();
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user