From 491e62664394a8689a3f8904fbe8dbc3dea05524 Mon Sep 17 00:00:00 2001 From: Eugen Wissner Date: Sun, 30 Aug 2026 02:08:45 +0200 Subject: Fix ICEs with recursive type declarations --- testsuite/runnable/recursive_record.elna | 48 ++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 testsuite/runnable/recursive_record.elna (limited to 'testsuite/runnable/recursive_record.elna') diff --git a/testsuite/runnable/recursive_record.elna b/testsuite/runnable/recursive_record.elna new file mode 100644 index 0000000..6f6b4fa --- /dev/null +++ b/testsuite/runnable/recursive_record.elna @@ -0,0 +1,48 @@ +type + Node = record + value: Int; + next: ^Node + end + +var + first: ^Node + second: ^Node + third: ^Node + +proc malloc(size: Word): Pointer +extern + +proc free(ptr: Pointer) +extern + +proc sum(node: ^Node): Int +var + result: Int +begin + result := 0; + if node = nil then + result := 0 + else + result := node^.value + sum(node^.next) + end; + return result + +begin + first := malloc(#size(Node)); + second := malloc(#size(Node)); + third := malloc(#size(Node)); + + first^.value := 1; + first^.next := second; + second^.value := 2; + second^.next := third; + third^.value := 3; + third^.next := nil; + + assert(sum(first) = 6); + assert(first^.next^.next^.value = 3); + + free(first); + free(second); + free(third) +end. -- cgit v1.2.3