blob: 6aabce4c927144bdbf72362ed2b6bef21accf8a4 [file]
// { dg-output "^l\r*\np\r*\nl\r*\np\r*\nl\r*\np2\r*\np1\r*\n$" }
// { dg-additional-options "-w" }
#![feature(no_core)]
#![feature(lang_items)]
#![no_core]
extern "C" {
fn printf(s: *const i8, ...);
}
#[lang = "sized"]
pub trait Sized {}
#[lang = "drop"]
pub trait Drop {
fn drop(&mut self);
}
struct ParamDroppable;
struct LocalDroppable;
struct FirstParamDroppable {
value: i32,
}
struct SecondParamDroppable {
value: i32,
}
impl Drop for ParamDroppable {
fn drop(&mut self) {
let msg = "p\n\0" as *const str as *const i8;
unsafe {
printf(msg);
}
}
}
impl Drop for LocalDroppable {
fn drop(&mut self) {
let msg = "l\n\0" as *const str as *const i8;
unsafe {
printf(msg);
}
}
}
impl Drop for FirstParamDroppable {
fn drop(&mut self) {
let msg = "p1\n\0" as *const str as *const i8;
unsafe {
printf(msg);
}
}
}
impl Drop for SecondParamDroppable {
fn drop(&mut self) {
let msg = "p2\n\0" as *const str as *const i8;
unsafe {
printf(msg);
}
}
}
fn named_param(_p: ParamDroppable) {
let _l = LocalDroppable;
}
fn wildcard_param(_: ParamDroppable) {
let _l = LocalDroppable;
}
fn multiple_params(_p1: FirstParamDroppable, _p2: SecondParamDroppable) {
let _l = LocalDroppable;
}
fn main() -> i32 {
named_param(ParamDroppable);
wildcard_param(ParamDroppable);
multiple_params(
FirstParamDroppable { value: 1 },
SecondParamDroppable { value: 2 },
);
0
}