]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
PR modula2/122241: Lack of spellng hints with simple errors
authorGaius Mulley <gaiusmod2@gmail.com>
Mon, 13 Oct 2025 15:43:07 +0000 (16:43 +0100)
committerGaius Mulley <gaiusmod2@gmail.com>
Mon, 13 Oct 2025 15:43:07 +0000 (16:43 +0100)
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 <gaiusmod2@gmail.com>
13 files changed:
gcc/m2/gm2-compiler/M2Quads.mod
gcc/m2/gm2-compiler/P3Build.bnf
gcc/m2/gm2-compiler/P3SymBuild.def
gcc/m2/gm2-compiler/P3SymBuild.mod
gcc/m2/gm2-compiler/PCBuild.bnf
gcc/m2/gm2-compiler/PCSymBuild.def
gcc/m2/gm2-compiler/PCSymBuild.mod
gcc/m2/gm2-compiler/PHBuild.bnf
gcc/m2/gm2-compiler/SymbolTable.def
gcc/m2/gm2-compiler/SymbolTable.mod
gcc/testsuite/gm2/iso/fail/badconst.mod [new file with mode: 0644]
gcc/testsuite/gm2/iso/fail/badtype.mod [new file with mode: 0644]
gcc/testsuite/gm2/iso/fail/badvar.mod [new file with mode: 0644]

index c2be0ba30a4354d00417e6ce393316ed8cf27d64..3bdf8c56ced0c02c4bb1c00693a0153bc73d03d4 100644 (file)
@@ -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
index ab4caae4e30e923cab7d95a92fee7ff885c6c43f..959b5f66d739aa9a8caa87fafeafadac2e4b4043 100644 (file)
@@ -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 %
                   =:
 
index 824efd06911726e96f64319a9c9d272894104478..1bbf7aba4f331cf57698f08cb607dd69b582b6b9 100644 (file)
@@ -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) ;
 
 
 (*
index b0bb1600fd98dd683798978cd12d98a14cb3b19e..8d8e12f771c4ef8afd962c91b9451659a4f5b5c2 100644 (file)
@@ -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) ;
index ddbe2f1b2fc076e86d8f9001134c894c7ae21441..d8ab7a634211024933b4734c20db3a5326655217 100644 (file)
@@ -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 %
                   =:
 
index a25ea87d5b6e8f23ce8b4149f068b26559e89bcb..1a1acf492195ea686ee49130c78b0b19462246f4 100644 (file)
@@ -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) ;
 
 
 (*
index 4db2730ce5c603080d61b4b15eb6e628fc9d8ba3..5e44997cc7ac824ed94061f9ef3458c09ca0e715 100644 (file)
@@ -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) ;
index 8153870db8bb98b7f7c9d4f14214ae3ad1337de5..abb5f372959afb9a466e08f7fc4eb7052c6bce87 100644 (file)
@@ -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 %
                   =:
 
index 12a3b3ad97d8c7f3ec304f242f0e229d410467da..09a5590013f2e3240494dbd4fdefd3770fe5946b 100644 (file)
@@ -2124,7 +2124,7 @@ PROCEDURE CheckForUndeclaredExports (ModSym: CARDINAL) ;
                              an error message is displayed.
 *)
 
-PROCEDURE CheckForUnknownInModule ;
+PROCEDURE CheckForUnknownInModule (tokno: CARDINAL) ;
 
 
 (*
index e733cfde840686a46434f2513b7359f13951abe9..023bd49105418f4439b3784f976430b91c510422 100644 (file)
@@ -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 (file)
index 0000000..0e58377
--- /dev/null
@@ -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 (file)
index 0000000..9678339
--- /dev/null
@@ -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 (file)
index 0000000..7a41706
--- /dev/null
@@ -0,0 +1,7 @@
+MODULE badvar ;
+
+VAR
+   foo: CARDINAL ;
+BEGIN
+   Foo := 1
+END badvar.