Skip to content

StackOverflowError in llvm/Transformer.scala #1213

@danielflat

Description

@danielflat

The following effekt program is not running. I need to get this test program running to my thesis.


record OneSlotPerson(
  field1: Int,
  field2: Int,
  field3: Int,
  field4: Int,
  field5: Int,
  field6: Int
)

// we first allocate 128 slots and then release them all, such that we have exactly 128 slots on the to-do-list
// therefore, we have to flush the to-do list twice to clear it completely
def allocate128SlotsAndReleaseThem() = {
    var x1 = OneSlotPerson(1, 2, 3, 4, 5, 6)
    var x2 = OneSlotPerson(2, 3, 4, 5, 6, 7)
    var x3 = OneSlotPerson(3, 4, 5, 6, 7, 8)
    var x4 = OneSlotPerson(4, 5, 6, 7, 8, 9)
    var x5 = OneSlotPerson(5, 6, 7, 8, 9, 10)
    var x6 = OneSlotPerson(6, 7, 8, 9, 10, 11)
    var x7 = OneSlotPerson(7, 8, 9, 10, 11, 12)
    var x8 = OneSlotPerson(8, 9, 10, 11, 12, 13)
    var x9 = OneSlotPerson(9, 10, 11, 12, 13, 14)
    var x10 = OneSlotPerson(10, 11, 12, 13, 14, 15)
    var x11 = OneSlotPerson(11, 12, 13, 14, 15, 16)
    var x12 = OneSlotPerson(12, 13, 14, 15, 16, 17)
    var x13 = OneSlotPerson(13, 14, 15, 16, 17, 18)
    var x14 = OneSlotPerson(14, 15, 16, 17, 18, 19)
    var x15 = OneSlotPerson(15, 16, 17, 18, 19, 20)
    var x16 = OneSlotPerson(16, 17, 18, 19, 20, 21)
    var x17 = OneSlotPerson(17, 18, 19, 20, 21, 22)
    var x18 = OneSlotPerson(18, 19, 20, 21, 22, 23)
    var x19 = OneSlotPerson(19, 20, 21, 22, 23, 24)
    var x20 = OneSlotPerson(20, 21, 22, 23, 24, 25)
    var x21 = OneSlotPerson(21, 22, 23, 24, 25, 26)
    var x22 = OneSlotPerson(22, 23, 24, 25, 26, 27)
    var x23 = OneSlotPerson(23, 24, 25, 26, 27, 28)
    var x24 = OneSlotPerson(24, 25, 26, 27, 28, 29)
    var x25 = OneSlotPerson(25, 26, 27, 28, 29, 30)
    var x26 = OneSlotPerson(26, 27, 28, 29, 30, 31)
    var x27 = OneSlotPerson(27, 28, 29, 30, 31, 32)
    var x28 = OneSlotPerson(28, 29, 30, 31, 32, 33)
    var x29 = OneSlotPerson(29, 30, 31, 32, 33, 34)
    var x30 = OneSlotPerson(30, 31, 32, 33, 34, 35)
    var x31 = OneSlotPerson(31, 32, 33, 34, 35, 36)
    var x32 = OneSlotPerson(32, 33, 34, 35, 36, 37)
    var x33 = OneSlotPerson(33, 34, 35, 36, 37, 38)
    var x34 = OneSlotPerson(34, 35, 36, 37, 38, 39)
    var x35 = OneSlotPerson(35, 36, 37, 38, 39, 40)
    var x36 = OneSlotPerson(36, 37, 38, 39, 40, 41)
    var x37 = OneSlotPerson(37, 38, 39, 40, 41, 42)
    var x38 = OneSlotPerson(38, 39, 40, 41, 42, 43)
    var x39 = OneSlotPerson(39, 40, 41, 42, 43, 44)
    var x40 = OneSlotPerson(40, 41, 42, 43, 44, 45)
    var x41 = OneSlotPerson(41, 42, 43, 44, 45, 46)
    var x42 = OneSlotPerson(42, 43, 44, 45, 46, 47)
    var x43 = OneSlotPerson(43, 44, 45, 46, 47, 48)
    var x44 = OneSlotPerson(44, 45, 46, 47, 48, 49)
    var x45 = OneSlotPerson(45, 46, 47, 48, 49, 50)
    var x46 = OneSlotPerson(46, 47, 48, 49, 50, 51)
    var x47 = OneSlotPerson(47, 48, 49, 50, 51, 52)
    var x48 = OneSlotPerson(48, 49, 50, 51, 52, 53)
    var x49 = OneSlotPerson(49, 50, 51, 52, 53, 54)
    var x50 = OneSlotPerson(50, 51, 52, 53, 54, 55)
    var x51 = OneSlotPerson(51, 52, 53, 54, 55, 56)
    var x52 = OneSlotPerson(52, 53, 54, 55, 56, 57)
    var x53 = OneSlotPerson(53, 54, 55, 56, 57, 58)
    var x54 = OneSlotPerson(54, 55, 56, 57, 58, 59)
    var x55 = OneSlotPerson(55, 56, 57, 58, 59, 60)
    var x56 = OneSlotPerson(56, 57, 58, 59, 60, 61)
    var x57 = OneSlotPerson(57, 58, 59, 60, 61, 62)
    var x58 = OneSlotPerson(58, 59, 60, 61, 62, 63)
    var x59 = OneSlotPerson(59, 60, 61, 62, 63, 64)
    var x60 = OneSlotPerson(60, 61, 62, 63, 64, 65)
    var x61 = OneSlotPerson(61, 62, 63, 64, 65, 66)
    var x62 = OneSlotPerson(62, 63, 64, 65, 66, 67)
    var x63 = OneSlotPerson(63, 64, 65, 66, 67, 68)
    var x64 = OneSlotPerson(64, 65, 66, 67, 68, 69)
    var x65 = OneSlotPerson(65, 66, 67, 68, 69, 70)
    var x66 = OneSlotPerson(66, 67, 68, 69, 70, 71)
    var x67 = OneSlotPerson(67, 68, 69, 70, 71, 72)
    var x68 = OneSlotPerson(68, 69, 70, 71, 72, 73)
    var x69 = OneSlotPerson(69, 70, 71, 72, 73, 74)
    var x70 = OneSlotPerson(70, 71, 72, 73, 74, 75)
    var x71 = OneSlotPerson(71, 72, 73, 74, 75, 76)
    var x72 = OneSlotPerson(72, 73, 74, 75, 76, 77)
    var x73 = OneSlotPerson(73, 74, 75, 76, 77, 78)
    var x74 = OneSlotPerson(74, 75, 76, 77, 78, 79)
    var x75 = OneSlotPerson(75, 76, 77, 78, 79, 80)
    var x76 = OneSlotPerson(76, 77, 78, 79, 80, 81)
    var x77 = OneSlotPerson(77, 78, 79, 80, 81, 82)
    var x78 = OneSlotPerson(78, 79, 80, 81, 82, 83)
    var x79 = OneSlotPerson(79, 80, 81, 82, 83, 84)
    var x80 = OneSlotPerson(80, 81, 82, 83, 84, 85)
    var x81 = OneSlotPerson(81, 82, 83, 84, 85, 86)
    var x82 = OneSlotPerson(82, 83, 84, 85, 86, 87)
    var x83 = OneSlotPerson(83, 84, 85, 86, 87, 88)
    var x84 = OneSlotPerson(84, 85, 86, 87, 88, 89)
    var x85 = OneSlotPerson(85, 86, 87, 88, 89, 90)
    var x86 = OneSlotPerson(86, 87, 88, 89, 90, 91)
    var x87 = OneSlotPerson(87, 88, 89, 90, 91, 92)
    var x88 = OneSlotPerson(88, 89, 90, 91, 92, 93)
    var x89 = OneSlotPerson(89, 90, 91, 92, 93, 94)
    var x90 = OneSlotPerson(90, 91, 92, 93, 94, 95)
    var x91 = OneSlotPerson(91, 92, 93, 94, 95, 96)
    var x92 = OneSlotPerson(92, 93, 94, 95, 96, 97)
    var x93 = OneSlotPerson(93, 94, 95, 96, 97, 98)
    var x94 = OneSlotPerson(94, 95, 96, 97, 98, 99)
    var x95 = OneSlotPerson(95, 96, 97, 98, 99, 100)
    var x96 = OneSlotPerson(96, 97, 98, 99, 100, 101)
    var x97 = OneSlotPerson(97, 98, 99, 100, 101, 102)
    var x98 = OneSlotPerson(98, 99, 100, 101, 102, 103)
    var x99 = OneSlotPerson(99, 100, 101, 102, 103, 104)
    var x100 = OneSlotPerson(100, 101, 102, 103, 104, 105)
    var x101 = OneSlotPerson(101, 102, 103, 104, 105, 106)
    var x102 = OneSlotPerson(102, 103, 104, 105, 106, 107)
    var x103 = OneSlotPerson(103, 104, 105, 106, 107, 108)
    var x104 = OneSlotPerson(104, 105, 106, 107, 108, 109)
    var x105 = OneSlotPerson(105, 106, 107, 108, 109, 110)
    var x106 = OneSlotPerson(106, 107, 108, 109, 110, 111)
    var x107 = OneSlotPerson(107, 108, 109, 110, 111, 112)
    var x108 = OneSlotPerson(108, 109, 110, 111, 112, 113)
    var x109 = OneSlotPerson(109, 110, 111, 112, 113, 114)
    var x110 = OneSlotPerson(110, 111, 112, 113, 114, 115)
    var x111 = OneSlotPerson(111, 112, 113, 114, 115, 116)
    var x112 = OneSlotPerson(112, 113, 114, 115, 116, 117)
    var x113 = OneSlotPerson(113, 114, 115, 116, 117, 118)
    var x114 = OneSlotPerson(114, 115, 116, 117, 118, 119)
    var x115 = OneSlotPerson(115, 116, 117, 118, 119, 120)
    var x116 = OneSlotPerson(116, 117, 118, 119, 120, 121)
    var x117 = OneSlotPerson(117, 118, 119, 120, 121, 122)
    var x118 = OneSlotPerson(118, 119, 120, 121, 122, 123)
    var x119 = OneSlotPerson(119, 120, 121, 122, 123, 124)
    var x120 = OneSlotPerson(120, 121, 122, 123, 124, 125)
    var x121 = OneSlotPerson(121, 122, 123, 124, 125, 126)
    var x122 = OneSlotPerson(122, 123, 124, 125, 126, 127)
    var x123 = OneSlotPerson(123, 124, 125, 126, 127, 128)
    var x124 = OneSlotPerson(124, 125, 126, 127, 128, 129)
    var x125 = OneSlotPerson(125, 126, 127, 128, 129, 130)
    var x126 = OneSlotPerson(126, 127, 128, 129, 130, 131)
    var x127 = OneSlotPerson(127, 128, 129, 130, 131, 132)
    var x128 = OneSlotPerson(128, 129, 130, 131, 132, 133)

    println(x1.field1)
    println(x2.field1)
    println(x3.field1)
    println(x4.field1)
    println(x5.field1)
    println(x6.field1)
    println(x7.field1)
    println(x8.field1)
    println(x9.field1)
    println(x10.field1)
    println(x11.field1)
    println(x12.field1)
    println(x13.field1)
    println(x14.field1)
    println(x15.field1)
    println(x16.field1)
    println(x17.field1)
    println(x18.field1)
    println(x19.field1)
    println(x20.field1)
    println(x21.field1)
    println(x22.field1)
    println(x23.field1)
    println(x24.field1)
    println(x25.field1)
    println(x26.field1)
    println(x27.field1)
    println(x28.field1)
    println(x29.field1)
    println(x30.field1)
    println(x31.field1)
    println(x32.field1)
    println(x33.field1)
    println(x34.field1)
    println(x35.field1)
    println(x36.field1)
    println(x37.field1)
    println(x38.field1)
    println(x39.field1)
    println(x40.field1)
    println(x41.field1)
    println(x42.field1)
    println(x43.field1)
    println(x44.field1)
    println(x45.field1)
    println(x46.field1)
    println(x47.field1)
    println(x48.field1)
    println(x49.field1)
    println(x50.field1)
    println(x51.field1)
    println(x52.field1)
    println(x53.field1)
    println(x54.field1)
    println(x55.field1)
    println(x56.field1)
    println(x57.field1)
    println(x58.field1)
    println(x59.field1)
    println(x60.field1)
    println(x61.field1)
    println(x62.field1)
    println(x63.field1)
    println(x64.field1)
    println(x65.field1)
    println(x66.field1)
    println(x67.field1)
    println(x68.field1)
    println(x69.field1)
    println(x70.field1)
    println(x71.field1)
    println(x72.field1)
    println(x73.field1)
    println(x74.field1)
    println(x75.field1)
    println(x76.field1)
    println(x77.field1)
    println(x78.field1)
    println(x79.field1)
    println(x80.field1)
    println(x81.field1)
    println(x82.field1)
    println(x83.field1)
    println(x84.field1)
    println(x85.field1)
    println(x86.field1)
    println(x87.field1)
    println(x88.field1)
    println(x89.field1)
    println(x90.field1)
    println(x91.field1)
    println(x92.field1)
    println(x93.field1)
    println(x94.field1)
    println(x95.field1)
    println(x96.field1)
    println(x97.field1)
    println(x98.field1)
    println(x99.field1)
    println(x100.field1)
    println(x101.field1)
    println(x102.field1)
    println(x103.field1)
    println(x104.field1)
    println(x105.field1)
    println(x106.field1)
    println(x107.field1)
    println(x108.field1)
    println(x109.field1)
    println(x110.field1)
    println(x111.field1)
    println(x112.field1)
    println(x113.field1)
    println(x114.field1)
    println(x115.field1)
    println(x116.field1)
    println(x117.field1)
    println(x118.field1)
    println(x119.field1)
    println(x120.field1)
    println(x121.field1)
    println(x122.field1)
    println(x123.field1)
    println(x124.field1)
    println(x125.field1)
    println(x126.field1)
    println(x127.field1)
    println(x128.field1)
}

def main() = {
  allocate128SlotsAndReleaseThem();
  // allocate & flush to-do list twice
  var flushingTodoListFirstTime = OneSlotPerson(1, 2, 3, 4, 5, 6)
  var flushingTodoListSecondTime = OneSlotPerson(1, 2, 3, 4, 5, 7)

  // deallocate again
  println(flushingTodoListFirstTime.field1)
  println(flushingTodoListSecondTime.field1)
}

I let it run on effekt-master via effekt --no-optimize --backend=llvm allocate_first_then_release_flush_twice.effekt on my intel macbook, getting the following stack trace:

Exception in thread "main" java.lang.StackOverflowError
	at effekt.machine.Transformer$.transform(Transformer.scala:77)
	at effekt.machine.Transformer$.transform(Transformer.scala:170)
	at effekt.machine.Transformer$.transform(Transformer.scala:170)
	at effekt.machine.Transformer$.transform(Transformer.scala:170)
	at effekt.machine.Transformer$.transform(Transformer.scala:170)
	at effekt.machine.Transformer$.transform(Transformer.scala:170)
	at effekt.machine.Transformer$.transform(Transformer.scala:170)
	at effekt.machine.Transformer$.transform(Transformer.scala:170)

Best regards
Daniel

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions