]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
[PATCH] PR modula2/117948: Forward procedure declaration should only be available...
authorGaius Mulley <gaiusmod2@gmail.com>
Sat, 7 Dec 2024 15:56:21 +0000 (15:56 +0000)
committerGaius Mulley <gaiusmod2@gmail.com>
Sat, 7 Dec 2024 15:56:21 +0000 (15:56 +0000)
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.

(cherry picked from commit 41800372146f5ad15a8796b37f54965f78cc14fb)

Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
gcc/m2/gm2-compiler/P1Build.bnf
gcc/m2/gm2-compiler/P1SymBuild.def
gcc/m2/gm2-compiler/P1SymBuild.mod
gcc/testsuite/gm2/pim/fail/forward.mod [new file with mode: 0644]

index ac96ddb383f1794a89e956b8a81dd1f1a780c717..f41e7780422b0264155d92dce08d942fff2672a0 100644 (file)
@@ -878,7 +878,7 @@ ProcedureDeclaration :=                                                    % VAR
 
 PostProcedureHeading := ProperProcedure | ForwardDeclaration =:
 
-ForwardDeclaration := "FORWARD"                                            % EndBuildForward %
+ForwardDeclaration := "FORWARD"                                            % EndBuildForward (GetTokenNo ()-1) %
                     =:
 
 ProperProcedure := ProcedureBlock                                          % PushAutoOn %
index 89ed3ad480bd4fe8b9c79b2d6c08330f0f85e980..478660516fc77c1cbd936c903c93346816378a5e 100644 (file)
@@ -489,7 +489,7 @@ PROCEDURE BuildProcedureHeading ;
                                            Empty
 *)
 
-PROCEDURE EndBuildForward ;
+PROCEDURE EndBuildForward (forwardPos: CARDINAL) ;
 
 
 (*
index 8a2ed87b35679826e28e6c13df92f5dbbd79c6f7..cd42417a39483268da8bbd2ca3d9562f896ffce3 100644 (file)
@@ -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 (file)
index 0000000..123e006
--- /dev/null
@@ -0,0 +1,14 @@
+MODULE forward ;
+
+
+PROCEDURE foo (a: CARDINAL) ; FORWARD ;
+
+PROCEDURE foo (a: CARDINAL) ;
+BEGIN
+
+END foo ;
+
+
+BEGIN
+   foo (1)
+END forward.