public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r13-2056] d: Build internal TypeInfo types when module name is "object"
@ 2022-08-15 19:37 Iain Buclaw
0 siblings, 0 replies; only message in thread
From: Iain Buclaw @ 2022-08-15 19:37 UTC (permalink / raw)
To: gcc-cvs
https://gcc.gnu.org/g:250b1fa19d76b3e2f7a175b6b9ee6086fb548bfe
commit r13-2056-g250b1fa19d76b3e2f7a175b6b9ee6086fb548bfe
Author: Iain Buclaw <ibuclaw@gdcproject.org>
Date: Mon Aug 15 13:43:29 2022 +0200
d: Build internal TypeInfo types when module name is "object"
If for whatever reason the module declaration doesn't exist in the
object file, ensure that the internal definitions for TypeInfo and
TypeInfo_Class are still created, otherwise an ICE could occur later if
they are required for a run-time helper call.
gcc/d/ChangeLog:
* d-compiler.cc (Compiler::onParseModule): Call create_tinfo_types
when module name is object.
* typeinfo.cc (create_tinfo_types): Add guard for multiple
invocations.
Diff:
---
gcc/d/d-compiler.cc | 11 +++++++++--
gcc/d/typeinfo.cc | 4 ++++
2 files changed, 13 insertions(+), 2 deletions(-)
diff --git a/gcc/d/d-compiler.cc b/gcc/d/d-compiler.cc
index ada9721541b..ef19df12437 100644
--- a/gcc/d/d-compiler.cc
+++ b/gcc/d/d-compiler.cc
@@ -130,8 +130,7 @@ Compiler::onParseModule (Module *m)
{
if (md->packages.length == 0)
{
- Identifier *id = (md && md->id) ? md->id : m->ident;
- if (!strcmp (id->toChars (), "object"))
+ if (!strcmp (md->id->toChars (), "object"))
{
create_tinfo_types (m);
return;
@@ -147,6 +146,14 @@ Compiler::onParseModule (Module *m)
}
}
}
+ else if (m->ident)
+ {
+ if (!strcmp (m->ident->toChars (), "object"))
+ {
+ create_tinfo_types (m);
+ return;
+ }
+ }
if (!flag_no_builtin)
d_add_builtin_module (m);
diff --git a/gcc/d/typeinfo.cc b/gcc/d/typeinfo.cc
index d1f0d59952f..3577f669ed1 100644
--- a/gcc/d/typeinfo.cc
+++ b/gcc/d/typeinfo.cc
@@ -244,6 +244,10 @@ make_frontend_typeinfo (Identifier *ident, ClassDeclaration *base = NULL)
void
create_tinfo_types (Module *mod)
{
+ /* Already generated internal types for the object module. */
+ if (object_module != NULL)
+ return;
+
/* Build the internal TypeInfo and ClassInfo types.
See TypeInfoVisitor for documentation of field layout. */
make_internal_typeinfo (TK_TYPEINFO_TYPE, Identifier::idPool ("TypeInfo"),
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2022-08-15 19:37 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-08-15 19:37 [gcc r13-2056] d: Build internal TypeInfo types when module name is "object" Iain Buclaw
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).