Skip to content

Commit

Permalink
Fix use_self ICE
Browse files Browse the repository at this point in the history
  • Loading branch information
camsteffen committed Jul 3, 2021
1 parent c195db7 commit cb4670d
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 14 deletions.
17 changes: 3 additions & 14 deletions clippy_lints/src/use_self.rs
Original file line number Diff line number Diff line change
Expand Up @@ -87,11 +87,8 @@ const SEGMENTS_MSG: &str = "segments should be composed of at least 1 element";

impl<'tcx> LateLintPass<'tcx> for UseSelf {
fn check_item(&mut self, _cx: &LateContext<'_>, item: &Item<'_>) {
if !is_item_interesting(item) {
// This does two things:
// 1) Reduce needless churn on `self.stack`
// 2) Don't push `StackItem::NoCheck` when entering `ItemKind::OpaqueTy`,
// in order to lint `foo() -> impl <..>`
if matches!(item.kind, ItemKind::OpaqueTy(_)) {
// skip over `ItemKind::OpaqueTy` in order to lint `foo() -> impl <..>`
return;
}
// We push the self types of `impl`s on a stack here. Only the top type on the stack is
Expand Down Expand Up @@ -119,7 +116,7 @@ impl<'tcx> LateLintPass<'tcx> for UseSelf {
}

fn check_item_post(&mut self, _: &LateContext<'_>, item: &Item<'_>) {
if is_item_interesting(item) {
if !matches!(item.kind, ItemKind::OpaqueTy(_)) {
self.stack.pop();
}
}
Expand Down Expand Up @@ -297,11 +294,3 @@ fn lint_path_to_variant(cx: &LateContext<'_>, path: &Path<'_>) {
span_lint(cx, span);
}
}

fn is_item_interesting(item: &Item<'_>) -> bool {
use rustc_hir::ItemKind::{Const, Enum, Fn, Impl, Static, Struct, Trait, Union};
matches!(
item.kind,
Impl { .. } | Static(..) | Const(..) | Fn(..) | Enum(..) | Struct(..) | Union(..) | Trait(..)
)
}
13 changes: 13 additions & 0 deletions tests/ui/crashes/ice-7423.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
pub trait Trait {
fn f();
}

impl Trait for usize {
fn f() {
extern "C" {
fn g() -> usize;
}
}
}

fn main() {}

0 comments on commit cb4670d

Please sign in to comment.