From: Gaius Mulley Date: Sat, 7 Dec 2024 15:56:21 +0000 (+0000) Subject: [PATCH] PR modula2/117948: Forward procedure declaration should only be available... X-Git-Tag: releases/gcc-14.3.0~728 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6385000d36a8b0b9dce0b8dc92e101dfcc584ec5;p=thirdparty%2Fgcc.git [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 --- 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.