Map LinkOnceODR to weak_odr instead of linkonce_odr #2502
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 translator currently maps SPIR-V's
LinkOnceODR
to llvm'slinkonce_odr
, but that allows llvm to discard unreferenced globals, causing linking failures when linkinglinkonce_odr
symbols from multiple modules. llvm'sweak_odr
has the same merging semantics as llvm'slinkonce_odr
, except that unreferenced globals may not be discarded.SPIR-V's
LinkOnceODR
is "Same as theExport
linkage type but a function or global variable with this linkage type will be merged with other functions or global variables of the same name when linkage occurs". Unreferenced globals withExport
linkage (that gets mapped tocommon
orexternal
llvm linkage) are not discarded, soweak_odr
seems to be a better fit forLinkOnceODR
.When producing SPIR-V, map both
linkonce_odr
andweak_odr
toLinkOnceODR
for backwards compatibility, and add an llvm function with the previouslinkonce_odr
linkage to the test.