Following on from the initial bug fix for PR modula2/122241
this patch provides spell check hints for unknown types, variables
and constants.  The accuracy of the offending module end name
is also improved

gcc/m2/ChangeLog:

        PR modula2/122241
        * gm2-compiler/M2Quads.mod (BuildSizeFunction): Improve
        error message.
        (BuildTSizeFunction): Improve error message.
        * gm2-compiler/P3Build.bnf (ProgramModule): New variable
        namet.
        Pass namet to P3EndBuildProgModule.
        (ImplementationModule): New variable namet.
        Pass namet to P3EndBuildImpModule.
        (ModuleDeclaration): New variable namet.
        Pass namet to P3EndBuildInnerModule.
        (DefinitionModule): New variable namet.
        Pass namet to P3EndBuildDefModule.
        * gm2-compiler/P3SymBuild.def (P3EndBuildDefModule): New
        parameter tokno.
        (P3EndBuildImpModule): Ditto.
        (P3EndBuildProgModule): Ditto.
        (EndBuildInnerModule): Ditto.
        * gm2-compiler/P3SymBuild.mod (P3EndBuildDefModule): New
        parameter tokno.
        Pass tokno to CheckForUnknownInModule.
        (P3EndBuildImpModule): Ditto.
        (P3EndBuildProgModule): Ditto.
        (EndBuildInnerModule): Ditto.
        * gm2-compiler/PCBuild.bnf (ProgramModule): New variable
        namet.
        Pass namet to PCEndBuildProgModule.
        (ImplementationModule): New variable namet.
        Pass namet to PCEndBuildImpModule.
        (ModuleDeclaration): New variable namet.
        Pass namet to PCEndBuildInnerModule.
        (DefinitionModule): New variable namet.
        Pass namet to PCEndBuildDefModule.
        * gm2-compiler/PCSymBuild.def (PCEndBuildDefModule): New
        parameter tokno.
        (PCEndBuildImpModule): Ditto.
        (PCEndBuildProgModule): Ditto.
        (PCEndBuildInnerModule): Ditto.
        * gm2-compiler/PCSymBuild.mod (PCEndBuildDefModule): New
        parameter tokno.
        Pass tokno to CheckForUnknownInModule.
        (PCEndBuildImpModule): Ditto.
        (PCEndBuildProgModule): Ditto.
        (PCEndBuildInnerModule): Ditto.
        * gm2-compiler/PHBuild.bnf (DefinitionModule): New variable
        namet.
        Pass namet to PHEndBuildDefModule.
        (ModuleDeclaration): New variable namet.
        Pass namet to PHEndBuildProgModule.
        (ImplementationModule): New variable namet.
        Pass namet to PHEndBuildImpModule.
        (ModuleDeclaration): New variable namet.
        Pass namet to PHEndBuildInnerModule.
        (DefinitionModule): New variable namet.
        Pass namet to PHEndBuildDefModule.
        * gm2-compiler/SymbolTable.def (CheckForUnknownInModule): Add
        tokno parameter.
        * gm2-compiler/SymbolTable.mod (CheckForUnknownInModule): Add
        tokno parameter.
        Pass tokno to CheckForUnknowns.
        (CheckForUnknowns): Reimplement.

gcc/testsuite/ChangeLog:

        PR modula2/122241
        * gm2/iso/fail/badconst.mod: New test.
        * gm2/iso/fail/badtype.mod: New test.
        * gm2/iso/fail/badvar.mod: New test.

Signed-off-by: Gaius Mulley <[email protected]>
---
 gcc/m2/gm2-compiler/M2Quads.mod         |  4 +-
 gcc/m2/gm2-compiler/P3Build.bnf         | 20 ++++++----
 gcc/m2/gm2-compiler/P3SymBuild.def      |  8 ++--
 gcc/m2/gm2-compiler/P3SymBuild.mod      | 16 ++++----
 gcc/m2/gm2-compiler/PCBuild.bnf         | 25 +++++++-----
 gcc/m2/gm2-compiler/PCSymBuild.def      |  8 ++--
 gcc/m2/gm2-compiler/PCSymBuild.mod      | 16 ++++----
 gcc/m2/gm2-compiler/PHBuild.bnf         | 20 ++++++----
 gcc/m2/gm2-compiler/SymbolTable.def     |  2 +-
 gcc/m2/gm2-compiler/SymbolTable.mod     | 52 +++++++++++++------------
 gcc/testsuite/gm2/iso/fail/badconst.mod |  9 +++++
 gcc/testsuite/gm2/iso/fail/badtype.mod  | 11 ++++++
 gcc/testsuite/gm2/iso/fail/badvar.mod   |  7 ++++
 13 files changed, 121 insertions(+), 77 deletions(-)
 create mode 100644 gcc/testsuite/gm2/iso/fail/badconst.mod
 create mode 100644 gcc/testsuite/gm2/iso/fail/badtype.mod
 create mode 100644 gcc/testsuite/gm2/iso/fail/badvar.mod

diff --git a/gcc/m2/gm2-compiler/M2Quads.mod b/gcc/m2/gm2-compiler/M2Quads.mod
index c2be0ba30a4..3bdf8c56ced 100644
--- a/gcc/m2/gm2-compiler/M2Quads.mod
+++ b/gcc/m2/gm2-compiler/M2Quads.mod
@@ -10712,7 +10712,7 @@ BEGIN
    ELSE
       resulttok := functok ;
       MetaErrorT1 (resulttok,
-                   '{%E}SYSTEM procedure {%kSIZE} expects a variable as its 
parameter, seen {%1Ed}',
+                   '{%E}SYSTEM procedure {%kSIZE} expects a variable or type 
as its parameter, seen {%1Ed}',
                    OperandT (1)) ;
       ReturnVar := MakeConstLit (resulttok, MakeKey('0'), Cardinal)
    END ;
@@ -10777,7 +10777,7 @@ BEGIN
          GenQuadO (resulttok, SizeOp, ReturnVar, NulSym, GetSType (OperandT 
(1)), FALSE)
       ELSE
          MetaErrorT1 (resulttok,
-                      '{%E}SYSTEM procedure function {%kTSIZE} expects a 
variable as its first parameter, seen {%1Ed}',
+                      '{%E}SYSTEM procedure function {%kTSIZE} expects a 
variable or type as its first parameter, seen {%1Ed}',
                       OperandT (1)) ;
          ReturnVar := MakeConstLit (resulttok, MakeKey ('0'), Cardinal)
       END
diff --git a/gcc/m2/gm2-compiler/P3Build.bnf b/gcc/m2/gm2-compiler/P3Build.bnf
index ab4caae4e30..959b5f66d73 100644
--- a/gcc/m2/gm2-compiler/P3Build.bnf
+++ b/gcc/m2/gm2-compiler/P3Build.bnf
@@ -655,7 +655,7 @@ FileUnit :=                                                 
               % Pus
               ImplementationOrProgramModule )                              % 
PopAuto %
          =:
 
-ProgramModule :=                                                           % 
VAR modulet, endt: CARDINAL ; %
+ProgramModule :=                                                           % 
VAR modulet, endt, namet: CARDINAL ; %
                                                                            % 
modulet := GetTokenNo () %
                  "MODULE"                                                  % 
M2Error.DefaultProgramModule %
                                                                            % 
PushAutoOn %
@@ -670,12 +670,13 @@ ProgramModule :=                                          
                 % VAR
                   { Import }
                   Block                                                    % 
PushAutoOn %
                                                                            % 
endt := GetTokenNo () -1 %
+                                                                           % 
namet := GetTokenNo () %
                   Ident                                                    % 
EndBuildFile (endt) %
-                                                                           % 
P3EndBuildProgModule %
+                                                                           % 
P3EndBuildProgModule (namet) %
                   "."                                                      % 
PopAuto ; PopAuto %
                   =:
 
-ImplementationModule :=                                                    % 
VAR modulet, endt: CARDINAL ; %
+ImplementationModule :=                                                    % 
VAR modulet, endt, namet: CARDINAL ; %
                                                                            % 
modulet := GetTokenNo () %
                         "IMPLEMENTATION"                                   % 
M2Error.DefaultImplementationModule %
                                          "MODULE"                          % 
PushAutoOn %
@@ -689,8 +690,9 @@ ImplementationModule :=                                     
               % VAR
                          { Import }
                          Block                                             % 
PushAutoOn %
                                                                            % 
endt := GetTokenNo () -1 %
+                                                                           % 
namet := GetTokenNo () %
                          Ident                                             % 
EndBuildFile (endt) %
-                                                                           % 
P3EndBuildImpModule %
+                                                                           % 
P3EndBuildImpModule (namet) %
                          "."                                               % 
PopAuto ; PopAuto ; PopAuto %
                       =:
 
@@ -1503,7 +1505,7 @@ DefOptArg := "[" Ident ":" FormalType "=" ConstExpression 
                 % Bui
 
 FormalType := { "ARRAY" "OF" } QualidentCheck =:
 
-ModuleDeclaration :=                                                       % 
VAR modulet: CARDINAL ; %
+ModuleDeclaration :=                                                       % 
VAR modulet, namet: CARDINAL ; %
                                                                            % 
modulet := GetTokenNo () %
                      "MODULE"                                              % 
M2Error.DefaultInnerModule %
                                                                            % 
PushAutoOn %
@@ -1513,7 +1515,8 @@ ModuleDeclaration :=                                      
                 % VAR
                      [ Priority ] ";"
                      { Import } [ Export ]
                        Block                                               % 
PushAutoOn %
-                       Ident                                               % 
EndBuildInnerModule %
+                                                                          % 
namet := GetTokenNo () %
+                       Ident                                               % 
EndBuildInnerModule (namet) %
                                                                            % 
PopAuto ; PopAuto ; PopAuto %
                      =:
 
@@ -1540,7 +1543,7 @@ WithoutFromImport :=                                      
                 % Pus
 
 Import :=  FromImport | WithoutFromImport =:
 
-DefinitionModule :=                                                        % 
VAR deft, endt: CARDINAL ; %
+DefinitionModule :=                                                        % 
VAR deft, endt, namet: CARDINAL ; %
                                                                            % 
deft := GetTokenNo () %
                     "DEFINITION"                                           % 
M2Error.DefaultDefinitionModule %
                                  "MODULE"                                  % 
PushAutoOn %
@@ -1553,8 +1556,9 @@ DefinitionModule :=                                       
                 % VAR
                                         ]
                     { Definition }                                         % 
endt := GetTokenNo () %
                                    "END"                                   % 
PushAutoOn %
+                                                                           % 
namet := GetTokenNo () %
                                          Ident                             % 
EndBuildFile (endt) ;
-                                                                             
P3EndBuildDefModule %
+                                                                             
P3EndBuildDefModule (namet) %
                                                "."                         % 
PopAuto ; PopAuto ; PopAuto %
                   =:
 
diff --git a/gcc/m2/gm2-compiler/P3SymBuild.def 
b/gcc/m2/gm2-compiler/P3SymBuild.def
index 824efd06911..1bbf7aba4f3 100644
--- a/gcc/m2/gm2-compiler/P3SymBuild.def
+++ b/gcc/m2/gm2-compiler/P3SymBuild.def
@@ -64,7 +64,7 @@ PROCEDURE P3StartBuildDefModule ;
                               |------------|        |-----------|
 *)
 
-PROCEDURE P3EndBuildDefModule ;
+PROCEDURE P3EndBuildDefModule (tokno: CARDINAL) ;
 
 
 (*
@@ -101,7 +101,7 @@ PROCEDURE P3StartBuildImpModule ;
                                   |------------|        |-----------|
 *)
 
-PROCEDURE P3EndBuildImpModule ;
+PROCEDURE P3EndBuildImpModule (tokno: CARDINAL) ;
 
 
 (*
@@ -138,7 +138,7 @@ PROCEDURE P3StartBuildProgModule ;
                            |------------|        |-----------|
 *)
 
-PROCEDURE P3EndBuildProgModule ;
+PROCEDURE P3EndBuildProgModule (tokno: CARDINAL) ;
 
 
 (*
@@ -182,7 +182,7 @@ PROCEDURE StartBuildInnerModule ;
                          |------------|        |-----------|
 *)
 
-PROCEDURE EndBuildInnerModule ;
+PROCEDURE EndBuildInnerModule (tokno: CARDINAL) ;
 
 
 (*
diff --git a/gcc/m2/gm2-compiler/P3SymBuild.mod 
b/gcc/m2/gm2-compiler/P3SymBuild.mod
index b0bb1600fd9..8d8e12f771c 100644
--- a/gcc/m2/gm2-compiler/P3SymBuild.mod
+++ b/gcc/m2/gm2-compiler/P3SymBuild.mod
@@ -117,13 +117,13 @@ END P3StartBuildDefModule ;
                               |------------|        |-----------|
 *)
 
-PROCEDURE P3EndBuildDefModule ;
+PROCEDURE P3EndBuildDefModule (tokno: CARDINAL) ;
 VAR
    NameStart,
    NameEnd  : CARDINAL ;
 BEGIN
    Assert(CompilingDefinitionModule()) ;
-   CheckForUnknownInModule ;
+   CheckForUnknownInModule (tokno) ;
    EndScope ;
    M2StackSpell.Pop ;
    PopT(NameEnd) ;
@@ -187,13 +187,13 @@ END P3StartBuildImpModule ;
                                   |------------|        |-----------|
 *)
 
-PROCEDURE P3EndBuildImpModule ;
+PROCEDURE P3EndBuildImpModule (tokno: CARDINAL) ;
 VAR
    NameStart,
    NameEnd  : Name ;
 BEGIN
    Assert(CompilingImplementationModule()) ;
-   CheckForUnknownInModule ;
+   CheckForUnknownInModule (tokno) ;
    EndScope ;
    M2StackSpell.Pop ;
    PopT(NameEnd) ;
@@ -262,13 +262,13 @@ END P3StartBuildProgModule ;
                            |------------|        |-----------|
 *)
 
-PROCEDURE P3EndBuildProgModule ;
+PROCEDURE P3EndBuildProgModule (tokno: CARDINAL) ;
 VAR
    NameStart,
    NameEnd  : Name ;
 BEGIN
    Assert(CompilingProgramModule()) ;
-   CheckForUnknownInModule ;
+   CheckForUnknownInModule (tokno) ;
    EndScope ;
    PopT(NameEnd) ;
    PopT(NameStart) ;
@@ -334,12 +334,12 @@ END StartBuildInnerModule ;
                          |------------|        |-----------|
 *)
 
-PROCEDURE EndBuildInnerModule ;
+PROCEDURE EndBuildInnerModule (tokno: CARDINAL) ;
 VAR
    NameStart,
    NameEnd  : Name ;
 BEGIN
-   CheckForUnknownInModule ;
+   CheckForUnknownInModule (tokno) ;
    EndScope ;
    PopT(NameEnd) ;
    PopT(NameStart) ;
diff --git a/gcc/m2/gm2-compiler/PCBuild.bnf b/gcc/m2/gm2-compiler/PCBuild.bnf
index ddbe2f1b2fc..d8ab7a63421 100644
--- a/gcc/m2/gm2-compiler/PCBuild.bnf
+++ b/gcc/m2/gm2-compiler/PCBuild.bnf
@@ -598,7 +598,8 @@ FileUnit :=                                                 
               % Pus
               ImplementationOrProgramModule )                              % 
PopAuto %
          =:
 
-ProgramModule := "MODULE"                                                  % 
M2Error.DefaultProgramModule %
+ProgramModule := "MODULE"                                                  % 
VAR namet: CARDINAL ; %
+                                                                           % 
M2Error.DefaultProgramModule %
                                                                            % 
PushAutoOn %
                   Ident                                                    % 
PCStartBuildProgModule %
                                                                            % 
PushAutoOff %
@@ -608,11 +609,13 @@ ProgramModule := "MODULE"                                 
                 % M2E
                   { Import                                                 % 
PCBuildImportOuterModule %
                   }
                   Block                                                    % 
PushAutoOn %
-                  Ident                                                    % 
PCEndBuildProgModule %
+                                                                          % 
namet := GetTokenNo () %
+                  Ident                                                    % 
PCEndBuildProgModule (namet) %
                   "."                                                      % 
PopAuto ; PopAuto %
                   =:
 
-ImplementationModule := "IMPLEMENTATION"                                   % 
M2Error.DefaultImplementationModule %
+ImplementationModule := "IMPLEMENTATION"                                   % 
VAR namet: CARDINAL ; %
+                                                                           % 
M2Error.DefaultImplementationModule %
                                          "MODULE"                          % 
PushAutoOn %
                          Ident                                             % 
PCStartBuildImpModule %
                                                                            % 
PushAutoOff %
@@ -621,8 +624,8 @@ ImplementationModule := "IMPLEMENTATION"                    
               % M2E
                          { Import                                          % 
PCBuildImportOuterModule %
                            }
                          Block                                             % 
PushAutoOn %
-
-                         Ident                                             % 
PCEndBuildImpModule %
+                                                                          % 
namet := GetTokenNo () %
+                         Ident                                             % 
PCEndBuildImpModule (namet) %
                          "."                                               % 
PopAuto ; PopAuto ; PopAuto %
                       =:
 
@@ -1271,7 +1274,8 @@ DefOptArg := "[" Ident ":" FormalType "=" ConstExpression 
"]" =:
 
 FormalType := { "ARRAY" "OF" } Qualident =:
 
-ModuleDeclaration := "MODULE"                                              % 
M2Error.DefaultInnerModule %
+ModuleDeclaration := "MODULE"                                              % 
VAR namet: CARDINAL ; %
+                                                                           % 
M2Error.DefaultInnerModule %
                                                                            % 
PushAutoOn %
                      Ident                                                 % 
PCStartBuildInnerModule %
                                                                            % 
PushAutoOff %
@@ -1280,7 +1284,8 @@ ModuleDeclaration := "MODULE"                             
                 % M2E
                         } [ Export
                             ]
                        Block                                               % 
PushAutoOn %
-                       Ident                                               % 
PCEndBuildInnerModule %
+                                                                          % 
namet := GetTokenNo () %
+                       Ident                                               % 
PCEndBuildInnerModule (namet) %
                                                                            % 
PopAuto ; PopAuto ; PopAuto %
                      =:
 
@@ -1299,7 +1304,8 @@ Import :=                                                 
                 % Pus
             IdentList ";" )                                                % 
PopAuto %
         =:
 
-DefinitionModule := "DEFINITION"                                           % 
M2Error.DefaultDefinitionModule %
+DefinitionModule := "DEFINITION"                                           % 
VAR namet: CARDINAL ; %
+                                                                           % 
M2Error.DefaultDefinitionModule %
                                  "MODULE"                                  % 
PushAutoOn %
                     [ "FOR" string ]
                     Ident                                                  % 
PCStartBuildDefModule ;
@@ -1310,7 +1316,8 @@ DefinitionModule := "DEFINITION"                          
                 % M2E
                                         ]
                     { Definition }
                                    "END"                                   % 
PushAutoOn %
-                                         Ident                             % 
PCEndBuildDefModule %
+                                                                          % 
namet := GetTokenNo () %
+                                         Ident                             % 
PCEndBuildDefModule (namet) %
                                                "."                         % 
PopAuto ; PopAuto ; PopAuto %
                   =:
 
diff --git a/gcc/m2/gm2-compiler/PCSymBuild.def 
b/gcc/m2/gm2-compiler/PCSymBuild.def
index a25ea87d5b6..1a1acf49219 100644
--- a/gcc/m2/gm2-compiler/PCSymBuild.def
+++ b/gcc/m2/gm2-compiler/PCSymBuild.def
@@ -71,7 +71,7 @@ PROCEDURE PCStartBuildDefModule ;
                               |------------|        |-----------|
 *)
 
-PROCEDURE PCEndBuildDefModule ;
+PROCEDURE PCEndBuildDefModule (tokno: CARDINAL) ;
 
 
 (*
@@ -108,7 +108,7 @@ PROCEDURE PCStartBuildImpModule ;
                                   |------------|        |-----------|
 *)
 
-PROCEDURE PCEndBuildImpModule ;
+PROCEDURE PCEndBuildImpModule (tokno: CARDINAL) ;
 
 
 (*
@@ -145,7 +145,7 @@ PROCEDURE PCStartBuildProgModule ;
                            |------------|        |-----------|
 *)
 
-PROCEDURE PCEndBuildProgModule ;
+PROCEDURE PCEndBuildProgModule (tokno: CARDINAL) ;
 
 
 (*
@@ -182,7 +182,7 @@ PROCEDURE PCStartBuildInnerModule ;
                           |------------|        |-----------|
 *)
 
-PROCEDURE PCEndBuildInnerModule ;
+PROCEDURE PCEndBuildInnerModule (tokno: CARDINAL) ;
 
 
 (*
diff --git a/gcc/m2/gm2-compiler/PCSymBuild.mod 
b/gcc/m2/gm2-compiler/PCSymBuild.mod
index 4db2730ce5c..5e44997cc7a 100644
--- a/gcc/m2/gm2-compiler/PCSymBuild.mod
+++ b/gcc/m2/gm2-compiler/PCSymBuild.mod
@@ -257,13 +257,13 @@ END PCStartBuildDefModule ;
                               |------------|        |-----------|
 *)
 
-PROCEDURE PCEndBuildDefModule ;
+PROCEDURE PCEndBuildDefModule (tokno: CARDINAL) ;
 VAR
    NameStart,
    NameEnd  : CARDINAL ;
 BEGIN
    Assert(CompilingDefinitionModule()) ;
-   CheckForUnknownInModule ;
+   CheckForUnknownInModule (tokno) ;
    EndScope ;
    PopT(NameEnd) ;
    PopT(NameStart) ;
@@ -325,13 +325,13 @@ END PCStartBuildImpModule ;
                                   |------------|        |-----------|
 *)
 
-PROCEDURE PCEndBuildImpModule ;
+PROCEDURE PCEndBuildImpModule (tokno: CARDINAL) ;
 VAR
    NameStart,
    NameEnd  : Name ;
 BEGIN
    Assert(CompilingImplementationModule()) ;
-   CheckForUnknownInModule ;
+   CheckForUnknownInModule (tokno) ;
    EndScope ;
    PopT(NameEnd) ;
    PopT(NameStart) ;
@@ -398,13 +398,13 @@ END PCStartBuildProgModule ;
                            |------------|        |-----------|
 *)
 
-PROCEDURE PCEndBuildProgModule ;
+PROCEDURE PCEndBuildProgModule (tokno: CARDINAL) ;
 VAR
    NameStart,
    NameEnd  : Name ;
 BEGIN
    Assert(CompilingProgramModule()) ;
-   CheckForUnknownInModule ;
+   CheckForUnknownInModule (tokno) ;
    EndScope ;
    PopT(NameEnd) ;
    PopT(NameStart) ;
@@ -468,12 +468,12 @@ END PCStartBuildInnerModule ;
                          |------------|        |-----------|
 *)
 
-PROCEDURE PCEndBuildInnerModule ;
+PROCEDURE PCEndBuildInnerModule (tokno: CARDINAL) ;
 VAR
    NameStart,
    NameEnd  : Name ;
 BEGIN
-   CheckForUnknownInModule ;
+   CheckForUnknownInModule (tokno) ;
    EndScope ;
    PopT(NameEnd) ;
    PopT(NameStart) ;
diff --git a/gcc/m2/gm2-compiler/PHBuild.bnf b/gcc/m2/gm2-compiler/PHBuild.bnf
index 8153870db8b..abb5f372959 100644
--- a/gcc/m2/gm2-compiler/PHBuild.bnf
+++ b/gcc/m2/gm2-compiler/PHBuild.bnf
@@ -551,7 +551,7 @@ FileUnit :=                                                 
               % Pus
               ImplementationOrProgramModule )                              % 
PopAuto %
          =:
 
-ProgramModule :=                                                           % 
VAR begint, endt: CARDINAL ; %
+ProgramModule :=                                                           % 
VAR begint, endt, namet: CARDINAL ; %
                                                                            % 
begint := GetTokenNo () %
                  "MODULE"                                                  % 
M2Error.DefaultProgramModule %
                                                                            % 
PushAutoOn %
@@ -566,14 +566,15 @@ ProgramModule :=                                          
                 % VAR
                                                                            % 
StartBuildInit (begint) %
                   Block                                                    % 
PushAutoOn %
                                                                            % 
endt := GetTokenNo () -1 %
+                                                                           % 
namet := GetTokenNo () %
                   Ident                                                    % 
EndBuildFile (endt) %
-                                                                           % 
P3EndBuildProgModule %
+                                                                           % 
P3EndBuildProgModule (namet) %
                   "."                                                      % 
PopAuto ;
                                                                              
EndBuildInit (endt) ;
                                                                              
PopAuto %
                   =:
 
-ImplementationModule :=                                                    % 
VAR begint, endt: CARDINAL ; %
+ImplementationModule :=                                                    % 
VAR begint, endt, namet: CARDINAL ; %
                                                                            % 
begint := GetTokenNo () %
                         "IMPLEMENTATION"                                   % 
M2Error.DefaultImplementationModule %
                                          "MODULE"                          % 
PushAutoOn %
@@ -588,8 +589,9 @@ ImplementationModule :=                                     
               % VAR
                                                                            % 
StartBuildInit (begint) %
                          Block                                             % 
PushAutoOn %
                                                                            % 
endt := GetTokenNo () -1 %
+                                                                           % 
namet := GetTokenNo () %
                          Ident                                             % 
EndBuildFile (endt) %
-                                                                           % 
P3EndBuildImpModule %
+                                                                           % 
P3EndBuildImpModule (namet) %
                          "."                                               % 
PopAuto ;
                                                                              
EndBuildInit (endt) ;
                                                                              
PopAuto ;
@@ -1229,7 +1231,7 @@ DefOptArg := "[" Ident ":" FormalType "=" 
SilentConstExpression "]" =:
 
 FormalType := { "ARRAY" "OF" } Qualident =:
 
-ModuleDeclaration :=                                                       % 
VAR begint: CARDINAL ; %
+ModuleDeclaration :=                                                       % 
VAR begint, namet: CARDINAL ; %
                                                                            % 
begint := GetTokenNo () %
                      "MODULE"                                              % 
M2Error.DefaultInnerModule %
                                                                            % 
PushAutoOn %
@@ -1242,7 +1244,8 @@ ModuleDeclaration :=                                      
                 % VAR
                         } [ Export
                             ]
                        Block                                               % 
PushAutoOn %
-                       Ident                                               % 
EndBuildInnerModule %
+                                                                          % 
namet := GetTokenNo () %
+                       Ident                                               % 
EndBuildInnerModule (namet) %
                                                                            % 
PopAuto ; PopAuto ; PopAuto %
                      =:
 
@@ -1258,7 +1261,7 @@ Import :=  "FROM" Ident "IMPORT" IdentList ";" |
            "IMPORT"
             IdentList ";" =:
 
-DefinitionModule :=                                                        % 
VAR begint, endt: CARDINAL ; %
+DefinitionModule :=                                                        % 
VAR begint, endt, namet: CARDINAL ; %
                                                                            % 
begint := GetTokenNo () %
                     "DEFINITION"                                           % 
M2Error.DefaultDefinitionModule %
                                  "MODULE"                                  % 
PushAutoOn %
@@ -1272,8 +1275,9 @@ DefinitionModule :=                                       
                 % VAR
                                         ]
                     { Definition }                                         % 
endt := GetTokenNo () %
                                    "END"                                   % 
PushAutoOn %
+                                                                           % 
namet := GetTokenNo () %
                                          Ident                             % 
EndBuildFile (endt) ;
-                                                                             
P3EndBuildDefModule %
+                                                                             
P3EndBuildDefModule (namet) %
                                                "."                         % 
PopAuto ; PopAuto ; PopAuto %
                   =:
 
diff --git a/gcc/m2/gm2-compiler/SymbolTable.def 
b/gcc/m2/gm2-compiler/SymbolTable.def
index 12a3b3ad97d..09a5590013f 100644
--- a/gcc/m2/gm2-compiler/SymbolTable.def
+++ b/gcc/m2/gm2-compiler/SymbolTable.def
@@ -2124,7 +2124,7 @@ PROCEDURE CheckForUndeclaredExports (ModSym: CARDINAL) ;
                              an error message is displayed.
 *)
 
-PROCEDURE CheckForUnknownInModule ;
+PROCEDURE CheckForUnknownInModule (tokno: CARDINAL) ;
 
 
 (*
diff --git a/gcc/m2/gm2-compiler/SymbolTable.mod 
b/gcc/m2/gm2-compiler/SymbolTable.mod
index e733cfde840..023bd491054 100644
--- a/gcc/m2/gm2-compiler/SymbolTable.mod
+++ b/gcc/m2/gm2-compiler/SymbolTable.mod
@@ -9585,29 +9585,29 @@ END ForeachParamSymDo ;
                              an error message is displayed.
 *)
 
-PROCEDURE CheckForUnknownInModule ;
+PROCEDURE CheckForUnknownInModule (tokno: CARDINAL) ;
 VAR
    pSym: PtrToSymbol ;
 BEGIN
-   pSym := GetPsym(GetCurrentModuleScope()) ;
+   pSym := GetPsym (GetCurrentModuleScope ()) ;
    WITH pSym^ DO
       CASE SymbolType OF
 
       DefImpSym: WITH DefImp DO
-                    CheckForUnknowns (name, ExportQualifiedTree,
+                    CheckForUnknowns (tokno, name, ExportQualifiedTree,
                                       'EXPORT QUALIFIED') ;
-                    CheckForUnknowns (name, ExportUnQualifiedTree,
+                    CheckForUnknowns (tokno, name, ExportUnQualifiedTree,
                                       'EXPORT UNQUALIFIED') ;
-                    CheckForSymbols  (ExportRequest,
-                                      'requested by another modules import 
(symbols have not been exported by the appropriate definition module)') ;
-                    CheckForUnknowns (name, Unresolved, 'unresolved') ;
-                    CheckForUnknowns (name, LocalSymbols, 'locally used')
+                    CheckForSymbols (ExportRequest,
+                                     'requested by another modules import 
(symbols have not been exported by the appropriate definition module)') ;
+                    CheckForUnknowns (tokno, name, Unresolved, 'unresolved') ;
+                    CheckForUnknowns (tokno, name, LocalSymbols, 'locally 
used')
                  END |
       ModuleSym: WITH Module DO
-                    CheckForUnknowns (name, Unresolved, 'unresolved') ;
-                    CheckForUnknowns (name, ExportUndeclared, 'exported but 
undeclared') ;
-                    CheckForUnknowns (name, ExportTree, 'exported but 
undeclared') ;
-                    CheckForUnknowns (name, LocalSymbols, 'locally used')
+                    CheckForUnknowns (tokno, name, Unresolved, 'unresolved') ;
+                    CheckForUnknowns (tokno, name, ExportUndeclared, 'exported 
but undeclared') ;
+                    CheckForUnknowns (tokno, name, ExportTree, 'exported but 
undeclared') ;
+                    CheckForUnknowns (tokno, name, LocalSymbols, 'locally 
used')
                  END
 
       ELSE
@@ -9626,7 +9626,7 @@ BEGIN
    IF IsUnreportedUnknown (sym)
    THEN
       IncludeElementIntoSet (ReportedUnknowns, sym) ;
-      MetaErrorStringT1 (GetFirstUsed (sym), InitString ("unknown symbol 
{%1EUad}"), sym)
+      MetaErrorStringT1 (GetFirstUsed (sym), InitString ("unknown symbol 
{%1EUad} {%1&s}"), sym)
    END
 END UnknownSymbolError ;
 
@@ -9705,22 +9705,24 @@ END Listify ;
                       together with an error message.
 *)
 
-PROCEDURE CheckForUnknowns (name: Name; Tree: SymbolTree;
+PROCEDURE CheckForUnknowns (tokno: CARDINAL; name: Name; Tree: SymbolTree;
                             a: ARRAY OF CHAR) ;
 VAR
    s: String ;
 BEGIN
-   IF DoesTreeContainAny(Tree, IsUnreportedUnknown)
-   THEN
-      CurrentError := NewError(GetTokenNo()) ;
-      s := InitString("{%E} the following unknown symbols in module %<") ;
-      s := ConCat(s, Mark(InitStringCharStar(KeyToCharStar(name)))) ;
-      s := ConCat(s, Mark(InitString('%> were '))) ;
-      s := ConCat(s, Mark(InitString(a))) ;
-      s := ConCat (s, Mark (InitString (': '))) ;
-      s := ConCat (s, Mark (Listify (Tree, IsUnreportedUnknown))) ;
-      MetaErrorStringT0(GetTokenNo(), s) ;
-      ForeachNodeDo(Tree, UnknownSymbolError)
+   IF DoesTreeContainAny (Tree, IsUnreportedUnknown)
+   THEN
+      ForeachNodeDo (Tree, UnknownSymbolError) ;
+      IF NoOfNodes (Tree, IsUnreportedUnknown) > 0
+      THEN
+         s := InitString ("{%E} the following unknown symbols in module %<") ;
+         s := ConCat (s, Mark (InitStringCharStar (KeyToCharStar (name)))) ;
+         s := ConCat (s, Mark (InitString ('%> were '))) ;
+         s := ConCat (s, Mark (InitString (a))) ;
+         s := ConCat (s, Mark (InitString (': '))) ;
+         s := ConCat (s, Mark (Listify (Tree, IsUnreportedUnknown))) ;
+         MetaErrorStringT0 (tokno, s)
+      END
    END
 END CheckForUnknowns ;
 
diff --git a/gcc/testsuite/gm2/iso/fail/badconst.mod 
b/gcc/testsuite/gm2/iso/fail/badconst.mod
new file mode 100644
index 00000000000..0e58377e303
--- /dev/null
+++ b/gcc/testsuite/gm2/iso/fail/badconst.mod
@@ -0,0 +1,9 @@
+MODULE badconst ;
+
+CONST
+   foo = 1 ;
+BEGIN
+   IF Foo = 1
+   THEN
+   END
+END badconst.
diff --git a/gcc/testsuite/gm2/iso/fail/badtype.mod 
b/gcc/testsuite/gm2/iso/fail/badtype.mod
new file mode 100644
index 00000000000..9678339a158
--- /dev/null
+++ b/gcc/testsuite/gm2/iso/fail/badtype.mod
@@ -0,0 +1,11 @@
+MODULE badtype ;
+
+FROM SYSTEM IMPORT TSIZE ;
+
+TYPE
+   foo = CARDINAL ;
+BEGIN
+   IF TSIZE (Foo) = 1
+   THEN
+   END
+END badtype.
diff --git a/gcc/testsuite/gm2/iso/fail/badvar.mod 
b/gcc/testsuite/gm2/iso/fail/badvar.mod
new file mode 100644
index 00000000000..7a41706af55
--- /dev/null
+++ b/gcc/testsuite/gm2/iso/fail/badvar.mod
@@ -0,0 +1,7 @@
+MODULE badvar ;
+
+VAR
+   foo: CARDINAL ;
+BEGIN
+   Foo := 1
+END badvar.
-- 
2.39.5

Reply via email to