mirror of
https://github.com/rust-lang/rust-clippy
synced 2024-11-15 01:17:16 +00:00
Auto merge of #7428 - camsteffen:use-self-ice, r=flip1995
Fix use_self ICE changelog: Fix ICE #7423 r? `@flip1995`
This commit is contained in:
commit
0a59c24e8a
2 changed files with 16 additions and 14 deletions
|
@ -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
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
@ -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
tests/ui/crashes/ice-7423.rs
Normal file
13
tests/ui/crashes/ice-7423.rs
Normal file
|
@ -0,0 +1,13 @@
|
|||
pub trait Trait {
|
||||
fn f();
|
||||
}
|
||||
|
||||
impl Trait for usize {
|
||||
fn f() {
|
||||
extern "C" {
|
||||
fn g() -> usize;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {}
|
Loading…
Reference in a new issue