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.