d: Add TARGET_D_TEMPLATES_ALWAYS_COMDAT
authorIain Buclaw <ibuclaw@gdcproject.org>
Tue, 13 Apr 2021 20:28:55 +0000 (22:28 +0200)
committerIain Buclaw <ibuclaw@gdcproject.org>
Sat, 17 Apr 2021 10:50:25 +0000 (12:50 +0200)
commitbda519596543e49f77914b5677693e86be5d01d0
tree70d41323c49a2dbddef9b55e57fb8784fba78922
parentd81bc495a426b0020e44a9764fd904462a39983b
d: Add TARGET_D_TEMPLATES_ALWAYS_COMDAT

Following up on the fix for PR99914, when testing on MinGW, it was found
not to support weak in the same way as on ELF or Mach-O targets.

So the linkage has been reverted back to COMDAT for that target, however
in order to properly support overriding functions and variables, all
declarations with external linkage must be put on COMDAT.  For this a
new target hook has been added to control the behavior.

gcc/ChangeLog:

PR d/99914
* config/i386/winnt-d.c (TARGET_D_TEMPLATES_ALWAYS_COMDAT): Define.
* doc/tm.texi: Regenerate.
* doc/tm.texi.in (D language and ABI): Add @hook for
TARGET_D_TEMPLATES_ALWAYS_COMDAT.

gcc/d/ChangeLog:

PR d/99914
* d-target.def (d_templates_always_comdat): New hook.
* d-tree.h (mark_needed): Remove prototype.
* decl.cc: Include d-target.h.
(mark_needed): Rename to...
(d_mark_needed): ...this.  Make static.
(set_linkage_for_decl): Put variables in comdat if
d_templates_always_comdat.
gcc/config/i386/winnt-d.c
gcc/d/d-target.def
gcc/d/d-tree.h
gcc/d/decl.cc
gcc/doc/tm.texi
gcc/doc/tm.texi.in