https://gcc.gnu.org/g:639a147414ab2b870f9482123fcaa1821e0d5475

commit r16-1347-g639a147414ab2b870f9482123fcaa1821e0d5475
Author: Gaius Mulley <gaiusm...@gmail.com>
Date:   Mon Jun 9 18:26:36 2025 +0100

    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.
    
    Signed-off-by: Gaius Mulley <gaiusm...@gmail.com>

Diff:
---
 gcc/m2/gm2-compiler/M2Quads.mod         |  2 ++
 gcc/testsuite/gm2/pim/pass/forarray.mod | 21 +++++++++++++++++++++
 2 files changed, 23 insertions(+)

diff --git a/gcc/m2/gm2-compiler/M2Quads.mod b/gcc/m2/gm2-compiler/M2Quads.mod
index b5455d09c66f..748ce2498dbb 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 000000000000..e1b41e793bc0
--- /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.

Reply via email to