This repository has been archived by the owner on Jun 20, 2019. It is now read-only.
Fix issue 231 (mixin template emitted into multiple object files) #245
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.
See https://bugzilla.gdcproject.org/show_bug.cgi?id=231
The main problem is that our
FuncDeclaration::toThunkSymbolfunction callstoObjFilewhereas DMD doesn't calltoObjFilehere. I tried modifying the thunk code to work without thistoObjFilecall, but I couldn't get this into a working state.So because of this
toObjFilecall we should not really emit functions in some cases (external functions, thunk in current module). We have to handle these cases ind_finish_function. The old code usesinNonRootwhich does neither handle templates nor template mixins. It simply returns false for any function in a template mixin.isInstantiatedon the other hand explicitly checks for templates and does returnnullfor template mixins. SoisInstantiatedis true for functions in normal templates only which can always be emitted (functions are marked weak anyway). For all other cases - including template mixins -getModulewill get the correct root module.I don't know why the old code explicitly called
toParent2, but the new code should be equivalent (getModuletraverses the parent dsymbols in the same way)