Skip to content

Commit

Permalink
Fix CI problems
Browse files Browse the repository at this point in the history
  • Loading branch information
HKalbasi committed May 11, 2021
1 parent 8f5585a commit 1f20966
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 44 deletions.
Expand Up @@ -515,68 +515,64 @@ impl<'a, 'tcx> MirBorrowckCtxt<'a, 'tcx> {

err.buffer(&mut self.errors_buffer);
}

/// User cannot make signature of a trait mutable without changing the
/// trait. So we find if this error belongs to a trait and if so we move
/// suggestion to the trait or disable it if it is out of scope of this crate
/// suggestion to the trait or disable it if it is out of scope of this crate
fn is_error_in_trait(&self, local: Local) -> (bool, Option<Span>) {
if self.body.local_kind(local) != LocalKind::Arg {
return (false, None);
}
let hir_map = self.infcx.tcx.hir();
let my_def = self.body.source.def_id();
let my_hir = hir_map.local_def_id_to_hir_id(my_def.as_local().unwrap());
let td = if let Some(a) = self.infcx.tcx.impl_of_method(my_def).and_then(|x| {
self.infcx.tcx.trait_id_of_impl(x)
}) {
let td = if let Some(a) =
self.infcx.tcx.impl_of_method(my_def).and_then(|x| self.infcx.tcx.trait_id_of_impl(x))
{
a
} else {
return (false, None);
};
(true, td.as_local().and_then(|tld| {
let h = hir_map.local_def_id_to_hir_id(tld);
match hir_map.find(h) {
Some(Node::Item(hir::Item {
kind: hir::ItemKind::Trait(
_, _, _, _,
items
),
..
})) => {
let mut f_in_trait_opt = None;
for hir::TraitItemRef { id: fi, kind: k, .. } in *items {
let hi = fi.hir_id();
if !matches!(k, hir::AssocItemKind::Fn { .. }) {
continue;
}
if hir_map.name(hi) != hir_map.name(my_hir) {
continue;
(
true,
td.as_local().and_then(|tld| {
let h = hir_map.local_def_id_to_hir_id(tld);
match hir_map.find(h) {
Some(Node::Item(hir::Item {
kind: hir::ItemKind::Trait(_, _, _, _, items),
..
})) => {
let mut f_in_trait_opt = None;
for hir::TraitItemRef { id: fi, kind: k, .. } in *items {
let hi = fi.hir_id();
if !matches!(k, hir::AssocItemKind::Fn { .. }) {
continue;
}
if hir_map.name(hi) != hir_map.name(my_hir) {
continue;
}
f_in_trait_opt = Some(hi);
break;
}
f_in_trait_opt = Some(hi);
break;
}
f_in_trait_opt.and_then(|f_in_trait| {
match hir_map.find(f_in_trait) {
f_in_trait_opt.and_then(|f_in_trait| match hir_map.find(f_in_trait) {
Some(Node::TraitItem(hir::TraitItem {
kind: hir::TraitItemKind::Fn(hir::FnSig {
decl: hir::FnDecl {
inputs,
..
},
..
}, _),
kind:
hir::TraitItemKind::Fn(
hir::FnSig { decl: hir::FnDecl { inputs, .. }, .. },
_,
),
..
})) => {
let hir::Ty { span, .. } = inputs[local.index() - 1];
Some(span)
},
}
_ => None,
}
})
})
}
_ => None,
}
_ => None
}
}))
}),
)
}

// point to span of upvar making closure call require mutable borrow
Expand Down
2 changes: 1 addition & 1 deletion src/test/ui/suggestions/issue-68049-1.rs
Expand Up @@ -4,7 +4,7 @@ struct Test(u32);

unsafe impl GlobalAlloc for Test {
unsafe fn alloc(&self, _layout: Layout) -> *mut u8 {
self.0 += 1;
self.0 += 1; //~ ERROR cannot assign
0 as *mut u8
}

Expand Down
4 changes: 2 additions & 2 deletions src/test/ui/suggestions/issue-68049-2.rs
Expand Up @@ -6,15 +6,15 @@ struct Test1(i32);

impl Hello for Test1 {
fn example(&self, input: &i32) { // should not suggest here
*input = self.0;
*input = self.0; //~ ERROR cannot assign
}
}

struct Test2(i32);

impl Hello for Test2 {
fn example(&self, input: &i32) { // should not suggest here
self.0 += *input;
self.0 += *input; //~ ERROR cannot assign
}
}

Expand Down

0 comments on commit 1f20966

Please sign in to comment.