blob: 06fed6e0fd3da48a49e2d7592c8202a72e4d9db4 [file]
// { dg-output "inner\r*\nmiddle2\r*\nmiddle\r*\nouter2\r*\nouter\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 Outer;
struct Outer2;
struct Middle;
struct Middle2;
struct Inner;
impl Drop for Outer {
fn drop(&mut self) {
let msg = "outer\n\0" as *const str as *const i8;
unsafe {
printf(msg);
}
}
}
impl Drop for Outer2 {
fn drop(&mut self) {
let msg = "outer2\n\0" as *const str as *const i8;
unsafe {
printf(msg);
}
}
}
impl Drop for Middle {
fn drop(&mut self) {
let msg = "middle\n\0" as *const str as *const i8;
unsafe {
printf(msg);
}
}
}
impl Drop for Middle2 {
fn drop(&mut self) {
let msg = "middle2\n\0" as *const str as *const i8;
unsafe {
printf(msg);
}
}
}
impl Drop for Inner {
fn drop(&mut self) {
let msg = "inner\n\0" as *const str as *const i8;
unsafe {
printf(msg);
}
}
}
fn main() -> i32 {
let _outer = Outer;
{
let _middle = Middle;
{
let _inner = Inner;
}
let _middle2 = Middle2;
}
let _outer2 = Outer2;
0
}