From: Gaius Mulley Date: Thu, 17 Jul 2025 19:41:10 +0000 (+0100) Subject: [PATCH] PR modula2/120606: FOR loop ICE if the last expression uses an array X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=48e0ad74c108483a8be1d230d497c1331fba7824;p=thirdparty%2Fgcc.git [PATCH] PR modula2/120606: FOR loop ICE if the last expression uses an array This patch fixes the ICE which occurs if the last expression is an array. It ensures that the start and end values of the for loop expressions are dereferenced. gcc/m2/ChangeLog: PR modula2/120606 * gm2-compiler/M2Quads.mod (ForLoopLastIterator): Dereference start and end expressions e1 and e2 respectively. gcc/testsuite/ChangeLog: PR modula2/120606 * gm2/pim/pass/forarray.mod: New test. (cherry picked from commit 639a147414ab2b870f9482123fcaa1821e0d5475) Signed-off-by: Gaius Mulley --- diff --git a/gcc/m2/gm2-compiler/M2Quads.mod b/gcc/m2/gm2-compiler/M2Quads.mod index b5455d09c66..748ce2498db 100644 --- a/gcc/m2/gm2-compiler/M2Quads.mod +++ b/gcc/m2/gm2-compiler/M2Quads.mod @@ -4646,6 +4646,8 @@ BEGIN BySym) ; MetaErrorDecl (BySym, TRUE) ELSE + e1 := DereferenceLValue (e1tok, e1) ; + e2 := DereferenceLValue (e2tok, e2) ; GenQuadOTypetok (bytok, LastForIteratorOp, LastIterator, Make2Tuple (e1, e2), BySym, FALSE, FALSE, bytok, MakeVirtual2Tok (e1tok, e2tok), bytok) diff --git a/gcc/testsuite/gm2/pim/pass/forarray.mod b/gcc/testsuite/gm2/pim/pass/forarray.mod new file mode 100644 index 00000000000..e1b41e793bc --- /dev/null +++ b/gcc/testsuite/gm2/pim/pass/forarray.mod @@ -0,0 +1,21 @@ +MODULE forarray ; + + +VAR + array: ARRAY [0..10] OF CARDINAL ; + + +PROCEDURE Init ; +VAR + i, n: CARDINAL ; +BEGIN + array[0] := 10 ; + n := 0 ; + FOR i := 1 TO array[n] DO + END +END Init ; + + +BEGIN + Init +END forarray.