]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
[modula2] Bugfix local symbol names for -fm2-whole-program
authorGaius Mulley <gaiusmod2@gmail.com>
Fri, 17 Mar 2023 00:23:02 +0000 (00:23 +0000)
committerGaius Mulley <gaiusmod2@gmail.com>
Fri, 17 Mar 2023 00:23:02 +0000 (00:23 +0000)
Local symbols must be prefixed by the modulename if
-fm2-whole-program is used to avoid a name clash.

gcc/m2/ChangeLog:

* gm2-compiler/M2AsmUtil.mod (SymNeedsModulePrefix):
Re-implemented.
* gm2-libs/SysStorage.mod (enableTrace): Disable tracing.

Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
gcc/m2/gm2-compiler/M2AsmUtil.mod
gcc/m2/gm2-libs/SysStorage.mod

index 85bbceba3ea51e5467ec7bfc8892d7fec494807d..9ee5dd35df784f7de26cb6c3aba8666993382eee 100644 (file)
@@ -40,7 +40,7 @@ FROM SymbolTable IMPORT NulSym,
                         IsProcedure,
                         IsModule,
                         IsDefImp,
-                        IsExportQualified,
+                        IsExportQualified, IsExportUnQualified,
                         IsExported, IsPublic, IsExtern, IsMonoName,
                         IsDefinitionForC ;
 
@@ -146,28 +146,26 @@ END GetFullSymName ;
 
 
 (*
-   SymNeedsModulePrefix -
+   SymNeedsModulePrefix - return TRUE if symbol mod is required to have a prefix.
 *)
 
 PROCEDURE SymNeedsModulePrefix (sym, mod: CARDINAL) : BOOLEAN ;
 BEGIN
-   IF IsDefImp(mod)
+   IF IsDefImp (mod)
    THEN
-      IF WholeProgram
+      IF IsExportUnQualified (sym)
       THEN
-         IF NOT IsDefinitionForC(mod)
-         THEN
-            RETURN( TRUE )
-         END
-      ELSIF IsExportQualified(sym)
-      THEN
-         RETURN( TRUE )
+         RETURN FALSE
+      ELSE
+         (* We need to force the prefix if whole program is used otherwise
+            local symbols from multipl modules might conflict.  *)
+         RETURN WholeProgram OR IsExportQualified (sym)
       END
-   ELSIF IsModule(mod)
+   ELSIF IsModule (mod)
    THEN
-      RETURN( WholeProgram )
+      RETURN WholeProgram
    END ;
-   RETURN( FALSE )
+   RETURN FALSE
 END SymNeedsModulePrefix ;
 
 
@@ -185,7 +183,7 @@ BEGIN
       THEN
          RETURN( ConCat(ConCatChar(InitStringCharStar(KeyToCharStar(GetSymName(ModSym))), '_'),
                         GetModulePrefix(Name, ModSym, GetScope(ModSym))) )
-      ELSIF SymNeedsModulePrefix(Sym, ModSym)
+      ELSIF SymNeedsModulePrefix (Sym, ModSym)
       THEN
          RETURN( ConCatChar(ConCat(InitStringCharStar(KeyToCharStar(GetSymName(ModSym))), Mark(Name)), '_') )
       END
index 2277f93a3982f47c157d29b699f27f49ceb7c89f..2318ab7a6c556a817a7ea96bdf6c55f3104f06e1 100644 (file)
@@ -34,7 +34,7 @@ FROM SYSTEM IMPORT ADR ;
 CONST
    enableDeallocation =  TRUE ;
    enableZero         =  TRUE ;
-   enableTrace        =  TRUE ;
+   enableTrace        =  FALSE ;
 
 VAR
    callno: CARDINAL ;