| 1 | struct Foo[T] { |
| 2 | bar ?&Bar[T] |
| 3 | } |
| 4 | |
| 5 | struct Bar[T] { |
| 6 | foo ?&Foo[T] |
| 7 | } |
| 8 | |
| 9 | fn foo_new[T]() &Foo[T] { |
| 10 | return &Foo[T]{} |
| 11 | } |
| 12 | |
| 13 | fn test_mutual_recursive_generic_struct_reference() { |
| 14 | foo := foo_new[int]() |
| 15 | assert foo != unsafe { nil } |
| 16 | } |
| 17 | |
| 18 | pub struct Issue26675List[T] { |
| 19 | front ?&Issue26675ListNode[T] |
| 20 | back ?&Issue26675ListNode[T] |
| 21 | } |
| 22 | |
| 23 | pub struct Issue26675ListNode[T] { |
| 24 | value T |
| 25 | list ?&Issue26675List[T] |
| 26 | prev ?&Issue26675ListNode[T] |
| 27 | next ?&Issue26675ListNode[T] |
| 28 | } |
| 29 | |
| 30 | pub fn Issue26675ListNode.new[T]() &Issue26675ListNode[T] { |
| 31 | return &Issue26675ListNode[T]{} |
| 32 | } |
| 33 | |
| 34 | struct Issue26675Foo { |
| 35 | node &Issue26675ListNode[Issue26675Foo] |
| 36 | } |
| 37 | |
| 38 | fn test_recursive_generic_struct_instantiation_does_not_crash() { |
| 39 | node := Issue26675ListNode.new[Issue26675Foo]() |
| 40 | assert node != unsafe { nil } |
| 41 | } |
| 42 | |