// Some versions of the non-rust-enabled LLDB print the wrong generic // parameter type names in this test. //@ needs-rust-lldb //@ compile-flags:-g // === GDB TESTS =================================================================================== // gdb-command:run // gdb-command:print arg // gdbg-check:$1 = {b = -1, b1 = 0} // gdbr-check:$1 = associated_types::Struct {b: -1, b1: 0} // gdb-command:continue // gdb-command:print inferred // gdb-check:$2 = 1 // gdb-command:print explicitly // gdb-check:$3 = 1 // gdb-command:continue // gdb-command:print arg // gdb-check:$4 = 2 // gdb-command:continue // gdb-command:print arg // gdbg-check:$5 = {__0 = 4, __1 = 5} // gdbr-check:$5 = (4, 5) // gdb-command:continue // gdb-command:print a // gdb-check:$6 = 6 // gdb-command:print b // gdb-check:$7 = 7 // gdb-command:continue // gdb-command:print a // gdb-check:$8 = 8 // gdb-command:print b // gdb-check:$9 = 9 // gdb-command:continue // === LLDB TESTS ================================================================================== // lldb-command:run // lldb-command:print arg // lldbg-check:[...]$0 = { b = -1, b1 = 0 } // lldbr-check:(associated_types::Struct) arg = { b = -1, b1 = 0 } // lldb-command:continue // lldb-command:print inferred // lldbg-check:[...]$1 = 1 // lldbr-check:(i64) inferred = 1 // lldb-command:print explicitly // lldbg-check:[...]$2 = 1 // lldbr-check:(i64) explicitly = 1 // lldb-command:continue // lldb-command:print arg // lldbg-check:[...]$3 = 2 // lldbr-check:(i64) arg = 2 // lldb-command:continue // lldb-command:print arg // lldbg-check:[...]$4 = (4, 5) // lldbr-check:((i32, i64)) arg = { = 4 = 5 } // lldb-command:continue // lldb-command:print a // lldbg-check:[...]$5 = 6 // lldbr-check:(i32) a = 6 // lldb-command:print b // lldbg-check:[...]$6 = 7 // lldbr-check:(i64) b = 7 // lldb-command:continue // lldb-command:print a // lldbg-check:[...]$7 = 8 // lldbr-check:(i64) a = 8 // lldb-command:print b // lldbg-check:[...]$8 = 9 // lldbr-check:(i32) b = 9 // lldb-command:continue #![allow(unused_variables)] #![allow(dead_code)] #![feature(omit_gdb_pretty_printer_section)] #![omit_gdb_pretty_printer_section] trait TraitWithAssocType { type Type; fn get_value(&self) -> Self::Type; } impl TraitWithAssocType for i32 { type Type = i64; fn get_value(&self) -> i64 { *self as i64 } } struct Struct { b: T, b1: T::Type, } enum Enum { Variant1(T, T::Type), Variant2(T::Type, T) } fn assoc_struct(arg: Struct) { zzz(); // #break } fn assoc_local(x: T) { let inferred = x.get_value(); let explicitly: T::Type = x.get_value(); zzz(); // #break } fn assoc_arg(arg: T::Type) { zzz(); // #break } fn assoc_return_value(arg: T) -> T::Type { return arg.get_value(); } fn assoc_tuple(arg: (T, T::Type)) { zzz(); // #break } fn assoc_enum(arg: Enum) { match arg { Enum::Variant1(a, b) => { zzz(); // #break } Enum::Variant2(a, b) => { zzz(); // #break } } } fn main() { assoc_struct(Struct { b: -1, b1: 0 }); assoc_local(1); assoc_arg::(2); assoc_return_value(3); assoc_tuple((4, 5)); assoc_enum(Enum::Variant1(6, 7)); assoc_enum(Enum::Variant2(8, 9)); } fn zzz() { () }