public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc/devel/modula-2] Bugfix for tiny modules importing from definition for "C".
@ 2022-11-15 14:11 Gaius Mulley
  0 siblings, 0 replies; only message in thread
From: Gaius Mulley @ 2022-11-15 14:11 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:0c1fe5e2aad3fedcd7b7543b51361fa1c85cd050

commit 0c1fe5e2aad3fedcd7b7543b51361fa1c85cd050
Author: Gaius Mulley <gaiusmod2@gmail.com>
Date:   Tue Nov 15 14:11:04 2022 +0000

    Bugfix for tiny modules importing from definition for "C".
    
    If a tiny application module imports only from a definition for "C"
    the import graph will not join with the core modula-2 libraries.
    Thus if a range exception were to occur in the application the
    libraries might be uninitialized.  This patch forces the application
    module to be initialized last.
    
    gcc/m2/ChangeLog:
    
            * gm2-libs/M2Dependent.mod (DisplayModuleInfo): Use variable count
            to display entry number.  (CheckApplication) Check that the
            application is the last entry in the list and move the list head
            if appropriate.
    
    Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>

Diff:
---
 gcc/m2/gm2-libs/M2Dependent.mod | 40 ++++++++++++++++++++++++++++++++++++++--
 1 file changed, 38 insertions(+), 2 deletions(-)

diff --git a/gcc/m2/gm2-libs/M2Dependent.mod b/gcc/m2/gm2-libs/M2Dependent.mod
index a37d6892406..bdfebcf51ef 100644
--- a/gcc/m2/gm2-libs/M2Dependent.mod
+++ b/gcc/m2/gm2-libs/M2Dependent.mod
@@ -461,14 +461,17 @@ END ResolveDependencies ;
 
 PROCEDURE DisplayModuleInfo (state: DependencyState; name: ARRAY OF CHAR) ;
 VAR
-   mptr: ModuleChain ;
+   mptr : ModuleChain ;
+   count: CARDINAL ;
 BEGIN
    IF Modules[state] # NIL
    THEN
       printf ("%s modules\n", ADR (name)) ;
       mptr := Modules[state] ;
+      count := 0 ;
       REPEAT
-         printf ("  %s", mptr^.name) ;
+         printf ("  %d  %s", count, mptr^.name) ;
+         INC (count) ;
          IF mptr^.dependency.appl
          THEN
             printf (" application")
@@ -574,6 +577,36 @@ BEGIN
 END ForceDependencies ;
 
 
+(*
+   CheckApplication - check to see that the application is the last entry in the list.
+                      This might happen if the application only imports FOR C modules.
+*)
+
+PROCEDURE CheckApplication ;
+VAR
+   mptr,
+   appl: ModuleChain ;
+BEGIN
+   mptr := Modules[ordered] ;
+   IF mptr # NIL
+   THEN
+      appl := NIL ;
+      REPEAT
+         IF mptr^.dependency.appl
+         THEN
+            appl := mptr
+         ELSE
+            mptr := mptr^.next
+         END
+      UNTIL (appl # NIL) OR (mptr=Modules[ordered]) ;
+      IF appl # NIL
+      THEN
+         Modules[ordered] := appl^.next
+      END
+   END
+END CheckApplication ;
+
+
 (*
    ConstructModules - resolve dependencies and then call each
                       module constructor in turn.
@@ -600,6 +633,9 @@ BEGIN
    ForceDependencies ;
    traceprintf (ForceTrace, "After user forcing ordering\n");
    DumpModuleData (ForceTrace) ;
+   CheckApplication ;
+   traceprintf (ForceTrace, "After runtime forces application to the end\n");
+   DumpModuleData (ForceTrace) ;
    IF Modules[ordered] = NIL
    THEN
       traceprintf2 (ModuleTrace, "  module: %s has not registered itself using a global constructor\n", applicationmodule);

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2022-11-15 14:11 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-11-15 14:11 [gcc/devel/modula-2] Bugfix for tiny modules importing from definition for "C" Gaius Mulley

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