aboutsummaryrefslogtreecommitdiff
path: root/gcc/d/modules.cc
diff options
context:
space:
mode:
authorIain Buclaw <ibuclaw@gdcproject.org>2024-01-17 23:49:05 +0100
committerIain Buclaw <ibuclaw@gdcproject.org>2024-02-03 00:16:55 +0100
commit5470a9b176c2b3030ff3891c7e9403db2b0685b8 (patch)
tree6f8227718a03c22ea6a2ca1a78b7c8c18838c3c4 /gcc/d/modules.cc
parent838e706fa55b1798fb5f0242dbd90cd4d9817bbe (diff)
downloadgcc-5470a9b176c2b3030ff3891c7e9403db2b0685b8.zip
gcc-5470a9b176c2b3030ff3891c7e9403db2b0685b8.tar.gz
gcc-5470a9b176c2b3030ff3891c7e9403db2b0685b8.tar.bz2
d: Merge dmd, druntime d8e3976a58, phobos 7a6e95688
D front-end changes: - Import dmd v2.107.0-beta.1. - A string literal as an assert condition is deprecated. - Added `@standalone` for module constructors. D runtime changes: - Import druntime v2.107.0-beta.1. Phobos changes: - Import phobos v2.107.0-beta.1. gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd d8e3976a58. * dmd/VERSION: Bump version to v2.107.0-beta.1. * d-lang.cc (d_parse_file): Update for new front-end interface. * modules.cc (struct module_info): Add standalonectors. (build_module_tree): Implement @standalone. (register_module_decl): Likewise. libphobos/ChangeLog: * libdruntime/MERGE: Merge upstream druntime d8e3976a58. * src/MERGE: Merge upstream phobos 7a6e95688.
Diffstat (limited to 'gcc/d/modules.cc')
-rw-r--r--gcc/d/modules.cc22
1 files changed, 20 insertions, 2 deletions
diff --git a/gcc/d/modules.cc b/gcc/d/modules.cc
index 16b6733..58b15be 100644
--- a/gcc/d/modules.cc
+++ b/gcc/d/modules.cc
@@ -84,6 +84,7 @@ struct module_info
vec <tree, va_gc> *sharedctors;
vec <tree, va_gc> *shareddtors;
vec <tree, va_gc> *sharedctorgates;
+ vec <tree, va_gc> *standalonectors;
vec <tree, va_gc> *unitTests;
};
@@ -763,6 +764,11 @@ build_module_tree (Module *decl)
tm->sdtor = build_funcs_gates_fn (get_identifier ("*__modtestdtor"),
mitest.dtors, NULL);
+ if (mi.standalonectors)
+ tm->sictor
+ = build_funcs_gates_fn (get_identifier ("*__modtestsharedictor"),
+ mi.standalonectors, NULL);
+
if (mitest.sharedctors || mitest.sharedctorgates)
tm->ssharedctor
= build_funcs_gates_fn (get_identifier ("*__modtestsharedctor"),
@@ -793,6 +799,11 @@ build_module_tree (Module *decl)
decl->sdtor = build_funcs_gates_fn (get_identifier ("*__moddtor"),
mi.dtors, NULL);
+ if (mi.standalonectors)
+ decl->sictor
+ = build_funcs_gates_fn (get_identifier ("*__modsharedictor"),
+ mi.standalonectors, NULL);
+
if (mi.sharedctors || mi.sharedctorgates)
decl->ssharedctor
= build_funcs_gates_fn (get_identifier ("*__modsharedctor"),
@@ -858,8 +869,15 @@ register_module_decl (Declaration *d)
/* If a static constructor, push into the current ModuleInfo.
Checks for `shared' first because it derives from the non-shared
constructor type in the front-end. */
- if (fd->isSharedStaticCtorDeclaration ())
- vec_safe_push (minfo->sharedctors, decl);
+ if (SharedStaticCtorDeclaration *sctor
+ = fd->isSharedStaticCtorDeclaration ())
+ {
+ /* The `shared' static constructor was marked `@standalone'. */
+ if (sctor->standalone)
+ vec_safe_push (minfo->standalonectors, decl);
+ else
+ vec_safe_push (minfo->sharedctors, decl);
+ }
else if (fd->isStaticCtorDeclaration ())
vec_safe_push (minfo->ctors, decl);