| //@ compile-flags:-g | |
| //@ disable-gdb-pretty-printers | |
| //@ ignore-backends: gcc | |
| // === GDB TESTS =================================================================================== | |
| //@ gdb-command:run | |
| //@ gdb-command:print arg | |
| //@ gdb-check:$1 = associated_types::Struct<i32> {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 | |
| //@ gdb-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:v arg | |
| //@ lldb-check:[...] { b = -1 b1 = 0 } | |
| //@ lldb-command:continue | |
| //@ lldb-command:v inferred | |
| //@ lldb-check:[...] 1 | |
| //@ lldb-command:v explicitly | |
| //@ lldb-check:[...] 1 | |
| //@ lldb-command:continue | |
| //@ lldb-command:v arg | |
| //@ lldb-check:[...] 2 | |
| //@ lldb-command:continue | |
| //@ lldb-command:v arg | |
| //@ lldb-check:[...] { 0 = 4 1 = 5 } | |
| //@ lldb-command:continue | |
| //@ lldb-command:v a | |
| //@ lldb-check:[...] 6 | |
| //@ lldb-command:v b | |
| //@ lldb-check:[...] 7 | |
| //@ lldb-command:continue | |
| //@ lldb-command:v a | |
| //@ lldb-check:[...] 8 | |
| //@ lldb-command:v b | |
| //@ lldb-check:[...] 9 | |
| //@ lldb-command:continue | |
| #![allow(unused_variables)] | |
| #![allow(dead_code)] | |
| 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<T: TraitWithAssocType> { | |
| b: T, | |
| b1: T::Type, | |
| } | |
| enum Enum<T: TraitWithAssocType> { | |
| Variant1(T, T::Type), | |
| Variant2(T::Type, T) | |
| } | |
| fn assoc_struct<T: TraitWithAssocType>(arg: Struct<T>) { | |
| zzz(); // #break | |
| } | |
| fn assoc_local<T: TraitWithAssocType>(x: T) { | |
| let inferred = x.get_value(); | |
| let explicitly: T::Type = x.get_value(); | |
| zzz(); // #break | |
| } | |
| fn assoc_arg<T: TraitWithAssocType>(arg: T::Type) { | |
| zzz(); // #break | |
| } | |
| fn assoc_return_value<T: TraitWithAssocType>(arg: T) -> T::Type { | |
| return arg.get_value(); | |
| } | |
| fn assoc_tuple<T: TraitWithAssocType>(arg: (T, T::Type)) { | |
| zzz(); // #break | |
| } | |
| fn assoc_enum<T: TraitWithAssocType>(arg: Enum<T>) { | |
| 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::<i32>(2); | |
| assoc_return_value(3); | |
| assoc_tuple((4, 5)); | |
| assoc_enum(Enum::Variant1(6, 7)); | |
| assoc_enum(Enum::Variant2(8, 9)); | |
| } | |
| fn zzz() { () } |