diff options
| author | flip1995 <philipp.krones@embecosm.com> | 2021-07-16 10:45:28 +0200 |
|---|---|---|
| committer | flip1995 <philipp.krones@embecosm.com> | 2021-07-16 10:45:28 +0200 |
| commit | b98e2ec527fb13b2eaf4f70fd9c290fd0552e16a (patch) | |
| tree | 10dce4ca38d9a4109aa5355a236171501e5d55c6 | |
| parent | 78ffcd9959cc81d1328fcafb996dcc7cd9b5f1ac (diff) | |
| download | rust-b98e2ec527fb13b2eaf4f70fd9c290fd0552e16a.tar.gz rust-b98e2ec527fb13b2eaf4f70fd9c290fd0552e16a.zip | |
Fix ICE in redundant_pattern_matching
| -rw-r--r-- | clippy_utils/src/ty.rs | 6 | ||||
| -rw-r--r-- | tests/ui/crashes/ice-7410.rs | 31 |
2 files changed, 35 insertions, 2 deletions
diff --git a/clippy_utils/src/ty.rs b/clippy_utils/src/ty.rs index 3f5c5604d43..523d55219ab 100644 --- a/clippy_utils/src/ty.rs +++ b/clippy_utils/src/ty.rs @@ -257,10 +257,12 @@ pub fn is_type_diagnostic_item(cx: &LateContext<'_>, ty: Ty<'_>, diag_item: Symb } } -/// Checks if the type is equal to a lang item +/// Checks if the type is equal to a lang item. +/// +/// Returns `false` if the `LangItem` is not defined. pub fn is_type_lang_item(cx: &LateContext<'_>, ty: Ty<'_>, lang_item: hir::LangItem) -> bool { match ty.kind() { - ty::Adt(adt, _) => cx.tcx.lang_items().require(lang_item).unwrap() == adt.did, + ty::Adt(adt, _) => cx.tcx.lang_items().require(lang_item).map_or(false, |li| li == adt.did), _ => false, } } diff --git a/tests/ui/crashes/ice-7410.rs b/tests/ui/crashes/ice-7410.rs new file mode 100644 index 00000000000..aaa422d88c3 --- /dev/null +++ b/tests/ui/crashes/ice-7410.rs @@ -0,0 +1,31 @@ +// compile-flags: -Clink-arg=-nostartfiles +// ignore-macos +// ignore-windows + +#![feature(lang_items, start, libc)] +#![no_std] +#![allow(clippy::redundant_pattern_matching)] + +use core::panic::PanicInfo; + +struct S; + +impl Drop for S { + fn drop(&mut self) {} +} + +#[start] +fn main(argc: isize, argv: *const *const u8) -> isize { + if let Some(_) = Some(S) { + } else { + } + 0 +} + +#[panic_handler] +fn panic(_info: &PanicInfo) -> ! { + loop {} +} + +#[lang = "eh_personality"] +extern "C" fn eh_personality() {} |
