https://gcc.gnu.org/g:6385000d36a8b0b9dce0b8dc92e101dfcc584ec5

commit r14-11071-g6385000d36a8b0b9dce0b8dc92e101dfcc584ec5
Author: Gaius Mulley <gaiusm...@gmail.com>
Date:   Sat Dec 7 15:56:21 2024 +0000

    [PATCH] 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.
    
    (cherry picked from commit 41800372146f5ad15a8796b37f54965f78cc14fb)
    
    Signed-off-by: Gaius Mulley <gaiusm...@gmail.com>

Diff:
---
 gcc/m2/gm2-compiler/P1Build.bnf        |  2 +-
 gcc/m2/gm2-compiler/P1SymBuild.def     |  2 +-
 gcc/m2/gm2-compiler/P1SymBuild.mod     | 12 ++++++++++--
 gcc/testsuite/gm2/pim/fail/forward.mod | 14 ++++++++++++++
 4 files changed, 26 insertions(+), 4 deletions(-)

diff --git a/gcc/m2/gm2-compiler/P1Build.bnf b/gcc/m2/gm2-compiler/P1Build.bnf
index ac96ddb383f1..f41e7780422b 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 89ed3ad480bd..478660516fc7 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 8a2ed87b3567..cd42417a3948 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 000000000000..123e006dd434
--- /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.

Reply via email to