diff options
author | Iain Buclaw <ibuclaw@gdcproject.org> | 2022-08-15 13:43:29 +0200 |
---|---|---|
committer | Iain Buclaw <ibuclaw@gdcproject.org> | 2022-08-15 21:35:09 +0200 |
commit | 250b1fa19d76b3e2f7a175b6b9ee6086fb548bfe (patch) | |
tree | 23957e10c00ddc20bfd237aab21b051fb9f157d9 /gcc | |
parent | 9fb12ee6fb75be4f980a235dc3f28a29ecc80de0 (diff) | |
download | gcc-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.cc | 11 | ||||
-rw-r--r-- | 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 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"), |