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 <gaiusmod2@gmail.com>
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)
--- /dev/null
+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.