aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorGaius Mulley <gaiusmod2@gmail.com>2024-12-07 14:04:44 +0000
committerGaius Mulley <gaiusmod2@gmail.com>2024-12-07 14:04:44 +0000
commit41800372146f5ad15a8796b37f54965f78cc14fb (patch)
tree29c44fb06d48cb6acec18c662a23a393266f8857 /gcc
parent4abcf4ad38a4081f02ed09aed7892a3a6af61cbb (diff)
downloadgcc-41800372146f5ad15a8796b37f54965f78cc14fb.zip
gcc-41800372146f5ad15a8796b37f54965f78cc14fb.tar.gz
gcc-41800372146f5ad15a8796b37f54965f78cc14fb.tar.bz2
PR modula2/117948: Forward procedure declaration should only be available in ISO
This patch restricts the forward procedure declaration to the ISO dialect. gcc/m2/ChangeLog: PR modula2/117948 * gm2-compiler/P1Build.bnf (ForwardDeclaration): Pass token position of the FORWARD keyword to EndBuildForward. * gm2-compiler/P1SymBuild.def (EndBuildForward): New parameter forwardPos. * gm2-compiler/P1SymBuild.mod (EndBuildForward): Issue an error at forwardPos if the Iso boolean is false. gcc/testsuite/ChangeLog: PR modula2/117948 * gm2/pim/fail/forward.mod: New test. Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
Diffstat (limited to 'gcc')
-rw-r--r--gcc/m2/gm2-compiler/P1Build.bnf2
-rw-r--r--gcc/m2/gm2-compiler/P1SymBuild.def2
-rw-r--r--gcc/m2/gm2-compiler/P1SymBuild.mod12
-rw-r--r--gcc/testsuite/gm2/pim/fail/forward.mod14
4 files changed, 26 insertions, 4 deletions
diff --git a/gcc/m2/gm2-compiler/P1Build.bnf b/gcc/m2/gm2-compiler/P1Build.bnf
index 42d034d..22476ca 100644
--- a/gcc/m2/gm2-compiler/P1Build.bnf
+++ b/gcc/m2/gm2-compiler/P1Build.bnf
@@ -878,7 +878,7 @@ ProcedureDeclaration := % VAR
PostProcedureHeading := ProperProcedure | ForwardDeclaration =:
-ForwardDeclaration := "FORWARD" % EndBuildForward %
+ForwardDeclaration := "FORWARD" % EndBuildForward (GetTokenNo ()-1) %
=:
ProperProcedure := ProcedureBlock % PushAutoOn %
diff --git a/gcc/m2/gm2-compiler/P1SymBuild.def b/gcc/m2/gm2-compiler/P1SymBuild.def
index 89ed3ad..4786605 100644
--- a/gcc/m2/gm2-compiler/P1SymBuild.def
+++ b/gcc/m2/gm2-compiler/P1SymBuild.def
@@ -489,7 +489,7 @@ PROCEDURE BuildProcedureHeading ;
Empty
*)
-PROCEDURE EndBuildForward ;
+PROCEDURE EndBuildForward (forwardPos: CARDINAL) ;
(*
diff --git a/gcc/m2/gm2-compiler/P1SymBuild.mod b/gcc/m2/gm2-compiler/P1SymBuild.mod
index 8a2ed87..cd42417 100644
--- a/gcc/m2/gm2-compiler/P1SymBuild.mod
+++ b/gcc/m2/gm2-compiler/P1SymBuild.mod
@@ -26,7 +26,10 @@ FROM ASCII IMPORT nul ;
FROM NameKey IMPORT Name, WriteKey, MakeKey, KeyToCharStar, NulName ;
FROM M2Debug IMPORT Assert, WriteDebug ;
FROM M2LexBuf IMPORT GetFileName, GetTokenNo, UnknownTokenNo ;
-FROM M2MetaError IMPORT MetaErrorString2, MetaError0, MetaError1, MetaError2, MetaErrorT1, MetaErrorT2 ;
+
+FROM M2MetaError IMPORT MetaErrorString2, MetaError0, MetaError1,
+ MetaError2, MetaErrorT0, MetaErrorT1, MetaErrorT2 ;
+
FROM DynamicStrings IMPORT String, Slice, InitString, KillString, EqualCharStar, RIndex, Mark, ConCat ;
FROM M2Printf IMPORT printf0, printf1, printf2 ;
FROM M2Options IMPORT Iso ;
@@ -1064,13 +1067,18 @@ END EndBuildProcedure ;
Empty
*)
-PROCEDURE EndBuildForward ;
+PROCEDURE EndBuildForward (forwardPos: CARDINAL) ;
VAR
ProcSym: CARDINAL ;
tok : CARDINAL ;
BEGIN
ProcSym := OperandT (1) ;
tok := OperandTok (1) ;
+ IF NOT Iso
+ THEN
+ MetaErrorT0 (forwardPos,
+ 'forward declaration is only allowed in the ISO dialect of Modula-2')
+ END ;
IF GetProcedureDefined (ProcSym, ForwardProcedure)
THEN
MetaErrorT1 (GetProcedureDeclaredTok (ProcSym, ForwardProcedure),
diff --git a/gcc/testsuite/gm2/pim/fail/forward.mod b/gcc/testsuite/gm2/pim/fail/forward.mod
new file mode 100644
index 0000000..123e006
--- /dev/null
+++ b/gcc/testsuite/gm2/pim/fail/forward.mod
@@ -0,0 +1,14 @@
+MODULE forward ;
+
+
+PROCEDURE foo (a: CARDINAL) ; FORWARD ;
+
+PROCEDURE foo (a: CARDINAL) ;
+BEGIN
+
+END foo ;
+
+
+BEGIN
+ foo (1)
+END forward.