Fix Windows codegen (LLVM globals) in non-singlemodule mode #8978
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.
(the suggestions for root causes and fixes all come from @RX14)
Windows compilation so far was always being done in --single-module mode because --cross-compile implies it. But if one adds enough workarounds to try out the compiler on Windows, they would run into these problems, unless --single-module is specified.
__CxxFrameHandler3
is being added only in the main module but can be used in any other module, and the attempt would cause an error:Instead, define this function once per module (still on-demand).
https://gitter.im/crystal-lang/crystal?at=5e7ce5b3bf65703264de4711
void_ptr_type_descriptor
is being defined as an LLVM global once per module. But because it's the exact same symbol in all the modules, linking them together leads to this error (repeated per module):Instead, define it only in the main module (still on-demand) and then let other modules refer to it as an external constant.
https://gitter.im/crystal-lang/crystal?at=5e80a76fd71a6e7e8d7efa55