Skip to content

Commit

Permalink
Rollup merge of #81922 - magurotuna:issue81522, r=matthewjasper
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
Dylan-DPC authored Apr 5, 2021
2 parents 58e7189 + 06b3636 commit 54ea8e1
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 1 deletion.
8 changes: 7 additions & 1 deletion compiler/rustc_typeck/src/check/method/probe.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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> {
Expand Down Expand Up @@ -448,6 +450,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
orig_values,
steps.steps,
is_suggestion,
scope_expr_id,
);

probe_cx.assemble_inherent_candidates();
Expand Down Expand Up @@ -547,6 +550,7 @@ impl<'a, 'tcx> ProbeContext<'a, 'tcx> {
orig_steps_var_values: OriginalQueryValues<'tcx>,
steps: Lrc<Vec<CandidateStep<'tcx>>>,
is_suggestion: IsSuggestion,
scope_expr_id: hir::HirId,
) -> ProbeContext<'a, 'tcx> {
ProbeContext {
fcx,
Expand All @@ -564,6 +568,7 @@ impl<'a, 'tcx> ProbeContext<'a, 'tcx> {
private_candidate: None,
unsatisfied_predicates: Vec::new(),
is_suggestion,
scope_expr_id,
}
}

Expand Down Expand Up @@ -1312,7 +1317,7 @@ impl<'a, 'tcx> ProbeContext<'a, 'tcx> {
) {
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();
Expand Down Expand Up @@ -1594,6 +1599,7 @@ impl<'a, 'tcx> ProbeContext<'a, 'tcx> {
self.orig_steps_var_values.clone(),
steps,
IsSuggestion(true),
self.scope_expr_id,
);
pcx.allow_similar_names = true;
pcx.assemble_inherent_candidates();
Expand Down
31 changes: 31 additions & 0 deletions src/test/ui/inference/issue-81522.rs
Original file line number Diff line number Diff line change
@@ -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();
}
}

0 comments on commit 54ea8e1

Please sign in to comment.