// compile-flags: -Cdebuginfo=2 -Copt-level=0 -Ccodegen-units=1 // ignore-tidy-linelength // This test checks the debuginfo for the expected 3 vtables is generated for correct names and number // of entries. // NONMSVC-LABEL: !DIGlobalVariable(name: "::{vtable}" // MSVC-LABEL: !DIGlobalVariable(name: "impl$::vtable$" // NONMSVC: !DIDerivedType(tag: DW_TAG_pointer_type, name: "*const ()", // MSVC: !DIDerivedType(tag: DW_TAG_pointer_type, name: "ptr_const$ >", // CHECK: !DISubrange(count: 5 // NONMSVC-LABEL: !DIGlobalVariable(name: ">::{vtable}" // MSVC-LABEL: !DIGlobalVariable(name: "impl$ >::vtable$" // CHECK: !DISubrange(count: 4 // NONMSVC-LABEL: !DIGlobalVariable(name: "::{vtable}" // MSVC-LABEL: !DIGlobalVariable(name: "impl$::vtable$" // CHECK: !DISubrange(count: 3 #![crate_type = "lib"] pub struct Foo; pub trait SomeTrait { fn method1(&self) -> u32; fn method2(&self) -> u32; } impl SomeTrait for Foo { fn method1(&self) -> u32 { 1 } fn method2(&self) -> u32 { 2 } } pub trait SomeTraitWithGenerics { fn method1(&self) -> (T, U); } impl SomeTraitWithGenerics for Foo { fn method1(&self) -> (u64, i8) { (1, 2) } } pub fn foo(x: &Foo) -> (u32, (u64, i8), &dyn Send) { let y: &dyn SomeTrait = x; let z: &dyn SomeTraitWithGenerics = x; (y.method1(), z.method1(), x as &dyn Send) }