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