Codegen: don't incorrectly share metadata across llvm modules #4976
+8
−2
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes #4973
(or so I think)
At least I tried to reproduce the invalid memory access with this code and it didn't happen anymore.
I'm 99% sure this was the cause: metadata nodes, which belong to an LLVM::Module, were also being used in other modules. I confirmed this by changing the code a bit and adding checks (leaving the checks would be very inefficient, so I left them out). So when a module was disposed its metadata was disposed, and then when a second module was disposed that same metadata would be disposed again, leading to a crash.
We'll know for sure if we don't see those awful crashes in CI anymore :-)