diff options
author | Iain Buclaw <ibuclaw@gdcproject.org> | 2024-01-17 23:49:05 +0100 |
---|---|---|
committer | Iain Buclaw <ibuclaw@gdcproject.org> | 2024-02-03 00:16:55 +0100 |
commit | 5470a9b176c2b3030ff3891c7e9403db2b0685b8 (patch) | |
tree | 6f8227718a03c22ea6a2ca1a78b7c8c18838c3c4 /gcc/d/modules.cc | |
parent | 838e706fa55b1798fb5f0242dbd90cd4d9817bbe (diff) | |
download | gcc-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.cc | 22 |
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); |