rust/tests/codegen-units/item-collection/implicit-panic-call.rs

67 lines
1.1 KiB
Rust
Raw Normal View History

//@ compile-flags:-Zprint-mono-items=lazy
// rust-lang/rust#90405
// Ensure implicit panic calls are collected
#![feature(lang_items)]
#![feature(no_core)]
#![crate_type = "lib"]
#![no_core]
#![no_std]
#[lang = "panic_location"]
struct Location<'a> {
_file: &'a str,
_line: u32,
_col: u32,
}
#[lang = "panic_const_div_by_zero"]
#[inline]
#[track_caller]
fn panic_div_zero() -> ! {
loop {}
}
#[lang = "panic_const_div_overflow"]
#[inline]
#[track_caller]
fn panic_div_overflow() -> ! {
loop {}
}
#[lang = "sized"]
trait Sized {}
#[lang = "copy"]
trait Copy {}
#[lang = "freeze"]
trait Freeze {}
impl Copy for i32 {}
#[lang = "div"]
trait Div<Rhs = Self> {
type Output;
fn div(self, rhs: Rhs) -> Self::Output;
}
impl Div for i32 {
type Output = i32;
fn div(self, rhs: i32) -> i32 {
self / rhs
}
}
#[allow(unconditional_panic)]
pub fn foo() {
// This implicitly generates a panic call.
let _ = 1 / 0;
}
//~ MONO_ITEM fn foo
//~ MONO_ITEM fn <i32 as Div>::div
//~ MONO_ITEM fn panic_div_zero
//~ MONO_ITEM fn panic_div_overflow