aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorIain Buclaw <ibuclaw@gdcproject.org>2022-08-15 13:43:29 +0200
committerIain Buclaw <ibuclaw@gdcproject.org>2022-08-15 21:35:09 +0200
commit250b1fa19d76b3e2f7a175b6b9ee6086fb548bfe (patch)
tree23957e10c00ddc20bfd237aab21b051fb9f157d9 /gcc
parent9fb12ee6fb75be4f980a235dc3f28a29ecc80de0 (diff)
downloadgcc-250b1fa19d76b3e2f7a175b6b9ee6086fb548bfe.zip
gcc-250b1fa19d76b3e2f7a175b6b9ee6086fb548bfe.tar.gz
gcc-250b1fa19d76b3e2f7a175b6b9ee6086fb548bfe.tar.bz2
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.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/d/d-compiler.cc11
-rw-r--r--gcc/d/typeinfo.cc4
2 files changed, 13 insertions, 2 deletions
diff --git a/gcc/d/d-compiler.cc b/gcc/d/d-compiler.cc
index ada9721..ef19df1 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 d1f0d59..3577f66 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"),