Open Octogonapus opened 6 months ago
On master I don't get a segfault but I still get an internal error.
Originally I wanted to only assign the global A
when the type was complete, but that led to #36104. Since we can't unassign globals, it seems we're stuck with zombie types. Maybe an ok fix is to return all Union{}
for the fieldtypes of such types?
Time to revisit https://github.com/JuliaLang/julia/pull/32658?
I think if we could fix dispatch with malformed types to go to the kind instead, we could treat these as malformed types which have inference disabled on them (instead of as concrete types) until the fields get populated? I am still not exactly sure of the details of that though.
Is there some part of #32658 we should try to merge and backport now?
The easier version of this is to just never populate the field types, and you have to reload the module and try again.
Currently, these cases do indeed cause a segfault, so how about adjusting some critical functions to avoid a segfault and at least keep the session alive? This might result in incomplete inference, and performance might not be optimal even after populating the fields, but reloading the module can refresh the inference anyway. Otherwise we would need a more complex invalidation system (although it sounds too heavy-handled to introduce just for this issue).
When defining a struct that uses a type that doesn't exist, you get an error but the struct is still somehow defined. Using it then causes a crash. I would expect the struct to not be defined at all, or at least using it to be an error not a crash.