2022-08-10 19:11:13 -05:00
|
|
|
//@ check-pass
|
|
|
|
//@ compile-flags: -Zhir-stats
|
|
|
|
//@ only-x86_64
|
2022-09-02 13:15:53 -05:00
|
|
|
// layout randomization affects the hir stat output
|
|
|
|
//@ needs-deterministic-layouts
|
2023-02-01 17:22:44 -06:00
|
|
|
|
|
|
|
// Type layouts sometimes change. When that happens, until the next bootstrap
|
|
|
|
// bump occurs, stage1 and stage2 will give different outputs for this test.
|
|
|
|
// Add an `ignore-stage1` comment marker to work around that problem during
|
|
|
|
// that time.
|
2022-08-10 19:11:13 -05:00
|
|
|
|
2022-09-02 13:15:53 -05:00
|
|
|
|
2022-08-10 23:37:21 -05:00
|
|
|
// The aim here is to include at least one of every different type of top-level
|
|
|
|
// AST/HIR node reported by `-Zhir-stats`.
|
2022-08-10 19:11:13 -05:00
|
|
|
|
|
|
|
#![allow(dead_code)]
|
|
|
|
|
|
|
|
use std::arch::asm;
|
|
|
|
use std::fmt::Debug;
|
|
|
|
use std::ffi::c_void;
|
|
|
|
|
|
|
|
extern "C" { fn f(p: *mut c_void); }
|
|
|
|
|
|
|
|
/// An enum.
|
|
|
|
enum E<'a, T: Copy> { A { t: T }, B(&'a u32) }
|
|
|
|
|
|
|
|
trait Go {
|
|
|
|
type G: Debug;
|
|
|
|
fn go(self) -> u32;
|
|
|
|
}
|
|
|
|
|
|
|
|
impl<'a, T: Copy> Go for E<'a, T> {
|
|
|
|
type G = bool;
|
|
|
|
fn go(self) -> u32 {
|
|
|
|
99
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
fn f2<T>(t: T) where T: Debug {}
|
|
|
|
|
|
|
|
fn main() {
|
|
|
|
let x = E::A { t: 3 };
|
|
|
|
match x {
|
|
|
|
E::A { .. } => {}
|
|
|
|
_ => {}
|
|
|
|
}
|
|
|
|
|
|
|
|
unsafe { asm!("mov rdi, 1"); }
|
|
|
|
}
|