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).