modularml / mojo

The Mojo Programming Language
https://docs.modular.com/mojo/manual/
Other
22.92k stars 2.58k forks source link

[BUG] Struct fields cannot be functions with Self #1958

Open siitron opened 6 months ago

siitron commented 6 months ago

Bug description

Mojo crashes when a struct have def or fn fields that uses its own type, either as the type of an argument or the return type. This type of error also isn't detected by the official VS Code extension (at least for me).

I don't see any reason for why this shouldn't be fine to do:

@value
struct Node:
    var node_f: fn(Self) -> Self
    var four: Int

fn f(a: Node) -> Node:
  return a

def main():
    var node = Node(f, 4)
    print(node.four)

Steps to reproduce

The following will crash:

struct Node:
    var f: fn(Self) -> Self
fn main():
    var node: Node
Compile error (when running in the [playground](https://docs.modular.com/mojo/playground): > Please submit a bug report to https://github.com/modularml/mojo/issues and include the crash backtrace along with all the relevant source codes. Stack dump without symbol names (ensure you have llvm-symbolizer in your PATH or set the environment var `LLVM_SYMBOLIZER_PATH` to point to it): 0 mojo 0x00005591cf41a937 1 mojo 0x00005591cf41850e 2 mojo 0x00005591cf41b00f 3 libc.so.6 0x00007f3d10c28520 4 mojo 0x00005591cfa5d424 5 mojo 0x00005591d1197f97 6 mojo 0x00005591d0a5fc9c 7 mojo 0x00005591cf3df68e 8 mojo 0x00005591d0a5e17f 9 mojo 0x00005591d1d95f56 10 mojo 0x00005591d1d965e1 11 mojo 0x00005591d1d9b9f2 12 mojo 0x00005591d1d9baef 13 mojo 0x00005591cfa620f2 14 mojo 0x00005591d1de8f76 15 mojo 0x00005591d1de9cb1 16 libc.so.6 0x00007f3d10c7aac3 17 libc.so.6 0x00007f3d10d0c850
Local output on my machine (WSL): > [20472:20472:20240314,231302.175280:WARNING process_reader_linux.cc:144] no stack mapping [20472:20472:20240314,231302.175409:ERROR file_io_posix.cc:144] open /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq: No such file or directory (2) [20472:20472:20240314,231302.175438:ERROR file_io_posix.cc:144] open /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq: No such file or directory (2) [20472:20473:20240314,231302.198904:ERROR directory_reader_posix.cc:42] opendir /home/siitron/.modular/crashdb/attachments/e7983f73-f270-4940-bb19-446937e4dc8a: No such file or directory (2) Please submit a bug report to https://github.com/modularml/mojo/issues and include the crash backtrace along with all the relevant source codes. Stack dump: > 0. Program arguments: mojo main.mojo Stack dump without symbol names (ensure you have llvm-symbolizer in your PATH or set the environment var `LLVM_SYMBOLIZER_PATH` to point to it): 0 mojo 0x00005568d154de47 1 mojo 0x00005568d154ba1e 2 mojo 0x00005568d154e51f 3 libc.so.6 0x00007f3626124fd0 4 mojo 0x00005568d3331aaf 5 mojo 0x00005568d19bfcfd 6 mojo 0x00005568d333250d 7 mojo 0x00005568d2c785ab 8 mojo 0x00005568d3332116 9 mojo 0x00005568d1964432 10 mojo 0x00005568d33325bd 11 mojo 0x00005568d2c79f2e 12 mojo 0x00005568d3332116 13 mojo 0x00005568d1964432 14 mojo 0x00005568d33325bd 15 mojo 0x00005568d1b18686 16 mojo 0x00005568d3332116 17 mojo 0x00005568d1964432 18 mojo 0x00005568d33325bd 19 mojo 0x00005568d331be28 20 mojo 0x00005568d3332116 21 mojo 0x00005568d1964432 22 mojo 0x00005568d2ba6667 23 mojo 0x00005568d2ba58cd 24 mojo 0x00005568d2ba6d2f 25 mojo 0x00005568d331cc3b 26 mojo 0x00005568d2ba5be2 27 mojo 0x00005568d2ba5960 28 mojo 0x00005568d2ba6e8f 29 mojo 0x00005568d1b18686 30 mojo 0x00005568d2ba57a8 31 mojo 0x00005568d2ba6e8f 32 mojo 0x00005568d331be28 33 mojo 0x00005568d2ba57a8 34 mojo 0x00005568d2ba661b 35 mojo 0x00005568d2ba58cd 36 mojo 0x00005568d2ba6d2f 37 mojo 0x00005568d331cc3b 38 mojo 0x00005568d2ba5be2 39 mojo 0x00005568d2ba5960 40 mojo 0x00005568d2ba6e8f 41 mojo 0x00005568d1b18686 42 mojo 0x00005568d2ba57a8 43 mojo 0x00005568d2ba6e8f 44 mojo 0x00005568d331be28 45 mojo 0x00005568d2ba57a8 46 mojo 0x00005568d2ba661b 47 mojo 0x00005568d2ba58cd 48 mojo 0x00005568d2ba6d2f 49 mojo 0x00005568d331cc3b 50 mojo 0x00005568d2ba5be2 51 mojo 0x00005568d2ba5960 52 mojo 0x00005568d2ba6e8f 53 mojo 0x00005568d1b18686 54 mojo 0x00005568d2ba57a8 55 mojo 0x00005568d2ba6e8f 56 mojo 0x00005568d331be28 57 mojo 0x00005568d2ba57a8 58 mojo 0x00005568d2ba661b 59 mojo 0x00005568d2ba58cd 60 mojo 0x00005568d2ba6d2f 61 mojo 0x00005568d331cc3b 62 mojo 0x00005568d2ba5be2 63 mojo 0x00005568d2ba5960 64 mojo 0x00005568d2ba6e8f 65 mojo 0x00005568d1b18686 66 mojo 0x00005568d2ba57a8 67 mojo 0x00005568d2ba6e8f 68 mojo 0x00005568d331be28 69 mojo 0x00005568d2ba57a8 70 mojo 0x00005568d2ba661b 71 mojo 0x00005568d2ba58cd 72 mojo 0x00005568d2ba6d2f 73 mojo 0x00005568d331cc3b 74 mojo 0x00005568d2ba5be2 75 mojo 0x00005568d2ba5960 76 mojo 0x00005568d2ba6e8f 77 mojo 0x00005568d1b18686 78 mojo 0x00005568d2ba57a8 79 mojo 0x00005568d2ba6e8f 80 mojo 0x00005568d331be28 81 mojo 0x00005568d2ba57a8 82 mojo 0x00005568d2ba661b 83 mojo 0x00005568d2ba58cd 84 mojo 0x00005568d2ba6d2f 85 mojo 0x00005568d331cc3b 86 mojo 0x00005568d2ba5be2 87 mojo 0x00005568d2ba5960 88 mojo 0x00005568d2ba6e8f 89 mojo 0x00005568d1b18686 90 mojo 0x00005568d2ba57a8 91 mojo 0x00005568d2ba6e8f 92 mojo 0x00005568d331be28 93 mojo 0x00005568d2ba57a8 94 mojo 0x00005568d2ba661b 95 mojo 0x00005568d2ba58cd 96 mojo 0x00005568d2ba6d2f 97 mojo 0x00005568d331cc3b 98 mojo 0x00005568d2ba5be2 99 mojo 0x00005568d2ba5960 100 mojo 0x00005568d2ba6e8f 101 mojo 0x00005568d1b18686 102 mojo 0x00005568d2ba57a8 103 mojo 0x00005568d2ba6e8f 104 mojo 0x00005568d331be28 105 mojo 0x00005568d2ba57a8 106 mojo 0x00005568d2ba661b 107 mojo 0x00005568d2ba58cd 108 mojo 0x00005568d2ba6d2f 109 mojo 0x00005568d331cc3b 110 mojo 0x00005568d2ba5be2 111 mojo 0x00005568d2ba5960 112 mojo 0x00005568d2ba6e8f 113 mojo 0x00005568d1b18686 114 mojo 0x00005568d2ba57a8 115 mojo 0x00005568d2ba6e8f 116 mojo 0x00005568d331be28 117 mojo 0x00005568d2ba57a8 118 mojo 0x00005568d2ba661b 119 mojo 0x00005568d2ba58cd 120 mojo 0x00005568d2ba6d2f 121 mojo 0x00005568d331cc3b 122 mojo 0x00005568d2ba5be2 123 mojo 0x00005568d2ba5960 124 mojo 0x00005568d2ba6e8f 125 mojo 0x00005568d1b18686 126 mojo 0x00005568d2ba57a8 127 mojo 0x00005568d2ba6e8f 128 mojo 0x00005568d331be28 129 mojo 0x00005568d2ba57a8 130 mojo 0x00005568d2ba661b 131 mojo 0x00005568d2ba58cd 132 mojo 0x00005568d2ba6d2f 133 mojo 0x00005568d331cc3b 134 mojo 0x00005568d2ba5be2 135 mojo 0x00005568d2ba5960 136 mojo 0x00005568d2ba6e8f 137 mojo 0x00005568d1b18686 138 mojo 0x00005568d2ba57a8 139 mojo 0x00005568d2ba6e8f 140 mojo 0x00005568d331be28 141 mojo 0x00005568d2ba57a8 142 mojo 0x00005568d2ba661b 143 mojo 0x00005568d2ba58cd 144 mojo 0x00005568d2ba6d2f 145 mojo 0x00005568d331cc3b 146 mojo 0x00005568d2ba5be2 147 mojo 0x00005568d2ba5960 148 mojo 0x00005568d2ba6e8f 149 mojo 0x00005568d1b18686 150 mojo 0x00005568d2ba57a8 151 mojo 0x00005568d2ba6e8f 152 mojo 0x00005568d331be28 153 mojo 0x00005568d2ba57a8 154 mojo 0x00005568d2ba661b 155 mojo 0x00005568d2ba58cd 156 mojo 0x00005568d2ba6d2f 157 mojo 0x00005568d331cc3b 158 mojo 0x00005568d2ba5be2 159 mojo 0x00005568d2ba5960 160 mojo 0x00005568d2ba6e8f 161 mojo 0x00005568d1b18686 162 mojo 0x00005568d2ba57a8 163 mojo 0x00005568d2ba6e8f 164 mojo 0x00005568d331be28 165 mojo 0x00005568d2ba57a8 166 mojo 0x00005568d2ba661b 167 mojo 0x00005568d2ba58cd 168 mojo 0x00005568d2ba6d2f 169 mojo 0x00005568d331cc3b 170 mojo 0x00005568d2ba5be2 171 mojo 0x00005568d2ba5960 172 mojo 0x00005568d2ba6e8f 173 mojo 0x00005568d1b18686 174 mojo 0x00005568d2ba57a8 175 mojo 0x00005568d2ba6e8f 176 mojo 0x00005568d331be28 177 mojo 0x00005568d2ba57a8 178 mojo 0x00005568d2ba661b 179 mojo 0x00005568d2ba58cd 180 mojo 0x00005568d2ba6d2f 181 mojo 0x00005568d331cc3b 182 mojo 0x00005568d2ba5be2 183 mojo 0x00005568d2ba5960 184 mojo 0x00005568d2ba6e8f 185 mojo 0x00005568d1b18686 186 mojo 0x00005568d2ba57a8 187 mojo 0x00005568d2ba6e8f 188 mojo 0x00005568d331be28 189 mojo 0x00005568d2ba57a8 190 mojo 0x00005568d2ba661b 191 mojo 0x00005568d2ba58cd 192 mojo 0x00005568d2ba6d2f 193 mojo 0x00005568d331cc3b 194 mojo 0x00005568d2ba5be2 195 mojo 0x00005568d2ba5960 196 mojo 0x00005568d2ba6e8f 197 mojo 0x00005568d1b18686 198 mojo 0x00005568d2ba57a8 199 mojo 0x00005568d2ba6e8f 200 mojo 0x00005568d331be28 201 mojo 0x00005568d2ba57a8 202 mojo 0x00005568d2ba661b 203 mojo 0x00005568d2ba58cd 204 mojo 0x00005568d2ba6d2f 205 mojo 0x00005568d331cc3b 206 mojo 0x00005568d2ba5be2 207 mojo 0x00005568d2ba5960 208 mojo 0x00005568d2ba6e8f 209 mojo 0x00005568d1b18686 210 mojo 0x00005568d2ba57a8 211 mojo 0x00005568d2ba6e8f 212 mojo 0x00005568d331be28 213 mojo 0x00005568d2ba57a8 214 mojo 0x00005568d2ba661b 215 mojo 0x00005568d2ba58cd 216 mojo 0x00005568d2ba6d2f 217 mojo 0x00005568d331cc3b 218 mojo 0x00005568d2ba5be2 219 mojo 0x00005568d2ba5960 220 mojo 0x00005568d2ba6e8f 221 mojo 0x00005568d1b18686 222 mojo 0x00005568d2ba57a8 223 mojo 0x00005568d2ba6e8f 224 mojo 0x00005568d331be28 225 mojo 0x00005568d2ba57a8 226 mojo 0x00005568d2ba661b 227 mojo 0x00005568d2ba58cd 228 mojo 0x00005568d2ba6d2f 229 mojo 0x00005568d331cc3b 230 mojo 0x00005568d2ba5be2 231 mojo 0x00005568d2ba5960 232 mojo 0x00005568d2ba6e8f 233 mojo 0x00005568d1b18686 234 mojo 0x00005568d2ba57a8 235 mojo 0x00005568d2ba6e8f 236 mojo 0x00005568d331be28 237 mojo 0x00005568d2ba57a8 238 mojo 0x00005568d2ba661b 239 mojo 0x00005568d2ba58cd 240 mojo 0x00005568d2ba6d2f 241 mojo 0x00005568d331cc3b 242 mojo 0x00005568d2ba5be2 243 mojo 0x00005568d2ba5960 244 mojo 0x00005568d2ba6e8f 245 mojo 0x00005568d1b18686 246 mojo 0x00005568d2ba57a8 247 mojo 0x00005568d2ba6e8f 248 mojo 0x00005568d331be28 249 mojo 0x00005568d2ba57a8 250 mojo 0x00005568d2ba661b 251 mojo 0x00005568d2ba58cd 252 mojo 0x00005568d2ba6d2f 253 mojo 0x00005568d331cc3b 254 mojo 0x00005568d2ba5be2 255 mojo 0x00005568d2ba5960 Segmentation fault

System information

- Mojo version: mojo 24.1.0 (55ec12d6)
- Modular CLI version: modular 0.5.1 (1b608e3d)
siitron commented 3 months ago

This no longer crashes. However, it now gives the error:

error: struct has recursive reference to itself
struct A:
       ^
mojo: error: failed to run the pass manager

Is this error correct?