This bug fix corrects the token of an error message when reporting
about a symbol which was not exported from a definition module.
The reimplemented procedure CheckCanBeImported uses MetaError2
with the spell hint format specifier if the symbol is unknown
rather than the older WriteFormat2 procedure.

gcc/m2/ChangeLog:

        PR modula2/23178
        * gm2-compiler/P3SymBuild.mod (CheckCanBeImported): Reimplement to
        use MetaError2 and provide spell hints if possible for unknown symbols.

gcc/testsuite/ChangeLog:

        PR modula2/23178
        * gm2/pim/fail/badprocedure.mod: New test.

Signed-off-by: Gaius Mulley <[email protected]>
---
 gcc/m2/gm2-compiler/P3SymBuild.mod          | 31 ++++++++++++---------
 gcc/testsuite/gm2/pim/fail/badprocedure.mod |  7 +++++
 2 files changed, 25 insertions(+), 13 deletions(-)
 create mode 100644 gcc/testsuite/gm2/pim/fail/badprocedure.mod

diff --git a/gcc/m2/gm2-compiler/P3SymBuild.mod 
b/gcc/m2/gm2-compiler/P3SymBuild.mod
index 8d8e12f771c..7ab421c39db 100644
--- a/gcc/m2/gm2-compiler/P3SymBuild.mod
+++ b/gcc/m2/gm2-compiler/P3SymBuild.mod
@@ -35,6 +35,7 @@ FROM SymbolTable IMPORT NulSym, ModeOfAddr, ProcedureKind,
                         SetCurrentModule, GetCurrentModule, SetFileModule,
                         GetExported, IsExported, IsImplicityExported,
                         IsDefImp, IsModule, IsImported, IsIncludedByDefinition,
+                        IsUnknown,
                         RequestSym,
                         IsProcedure, PutOptArgInit,
                         IsFieldEnumeration, GetType,
@@ -62,6 +63,7 @@ FROM M2Comp IMPORT CompilingDefinitionModule,
 
 FROM FifoQueue IMPORT GetSubrangeFromFifoQueue ;
 FROM M2Reserved IMPORT NulTok, ImportTok ;
+FROM M2MetaError IMPORT MetaError2 ;
 
 IMPORT M2Error ;
 IMPORT M2StackSpell ;
@@ -419,32 +421,35 @@ END CheckImportListOuterModule ;
 
 
 (*
-   CheckCanBeImported - checks to see that it is legal to import, Sym, from, 
ModSym.
+   CheckCanBeImported - checks to see that it is legal to import Sym from 
ModSym.
 *)
 
 PROCEDURE CheckCanBeImported (ModSym, Sym: CARDINAL) ;
-VAR
-   n1, n2: Name ;
 BEGIN
-   IF IsDefImp(ModSym)
+   IF IsDefImp (ModSym)
    THEN
-      IF IsExported(ModSym, Sym)
+      IF IsExported (ModSym, Sym)
       THEN
-         (* great all done *)
+         (* All done.  *)
          RETURN
       ELSE
-         IF IsImplicityExported(ModSym, Sym)
+         IF IsImplicityExported (ModSym, Sym)
          THEN
-            (* this is also legal *)
+            (* This is also legal.  *)
             RETURN
-         ELSIF IsDefImp(Sym) AND IsIncludedByDefinition(ModSym, Sym)
+         ELSIF IsDefImp (Sym) AND IsIncludedByDefinition (ModSym, Sym)
          THEN
-            (* this is also legal (for a definition module) *)
+            (* This is also legal (for a definition module).  *)
             RETURN
          END ;
-         n1 := GetSymName(ModSym) ;
-         n2 := GetSymName(Sym) ;
-         WriteFormat2('symbol %a is not exported from definition module %a', 
n2, n1)
+         (* Use spell checker for Unknown symbols.  *)
+         IF IsUnknown (Sym)
+         THEN
+            (* Spellcheck.  *)
+            MetaError2 ('{%1Ua} is not exported from definition module {%2a} 
{%1&s}', Sym, ModSym)
+         ELSE
+            MetaError2 ('{%1Ua} is not exported from definition module {%2a}', 
Sym, ModSym)
+         END
       END
    END
 END CheckCanBeImported ;
diff --git a/gcc/testsuite/gm2/pim/fail/badprocedure.mod 
b/gcc/testsuite/gm2/pim/fail/badprocedure.mod
new file mode 100644
index 00000000000..9b59dbded49
--- /dev/null
+++ b/gcc/testsuite/gm2/pim/fail/badprocedure.mod
@@ -0,0 +1,7 @@
+MODULE badprocedure ;
+
+IMPORT FIO ;
+
+BEGIN
+   FIO.WriteLn (FIO.StdOut)
+END badprocedure.
-- 
2.47.3

Reply via email to