https://gcc.gnu.org/g:585aa4065f1028c2fbfab55462e5e5e6b3c208c4
commit r15-7786-g585aa4065f1028c2fbfab55462e5e5e6b3c208c4 Author: Gaius Mulley <gaiusm...@gmail.com> Date: Sun Mar 2 19:04:37 2025 +0000 PR modula2/119088 ICE when for loop accesses an unknown variable as the iterator This patch fixes an ICE which occurs when a FOR statement attempts to use an undeclared variable as its iterator. gcc/m2/ChangeLog: PR modula2/119088 * gm2-compiler/M2SymInit.mod (ConfigSymInit): Reimplement to defensively check for NulSym type. gcc/testsuite/ChangeLog: PR modula2/119088 * gm2/pim/fail/tinyfor4.mod: New test. Signed-off-by: Gaius Mulley <gaiusm...@gmail.com> Diff: --- gcc/m2/gm2-compiler/M2SymInit.mod | 21 ++++++++++++++------- gcc/testsuite/gm2/pim/fail/tinyfor4.mod | 7 +++++++ 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/gcc/m2/gm2-compiler/M2SymInit.mod b/gcc/m2/gm2-compiler/M2SymInit.mod index ffe1f9b8da33..6c8912f2c4c0 100644 --- a/gcc/m2/gm2-compiler/M2SymInit.mod +++ b/gcc/m2/gm2-compiler/M2SymInit.mod @@ -202,16 +202,23 @@ BEGIN desc^.sym := sym ; desc^.type := GetSType (sym) ; desc^.initialized := FALSE ; - IF IsRecord (desc^.type) + (* An unknown symbol will have no type. *) + IF desc^.type = NulSym THEN - desc^.kind := record ; - desc^.rec.fieldDesc := Indexing.InitIndex (1) ; - PopulateFields (desc, desc^.type) - ELSE desc^.kind := scalar ; - IF IsArray (desc^.type) + desc^.initialized := TRUE (* For now we don't attempt to handle array types. *) + ELSE + IF IsRecord (desc^.type) THEN - desc^.initialized := TRUE (* For now we don't attempt to handle array types. *) + desc^.kind := record ; + desc^.rec.fieldDesc := Indexing.InitIndex (1) ; + PopulateFields (desc, desc^.type) + ELSE + desc^.kind := scalar ; + IF IsArray (desc^.type) + THEN + desc^.initialized := TRUE (* For now we don't attempt to handle array types. *) + END END END END diff --git a/gcc/testsuite/gm2/pim/fail/tinyfor4.mod b/gcc/testsuite/gm2/pim/fail/tinyfor4.mod new file mode 100644 index 000000000000..155b72565da0 --- /dev/null +++ b/gcc/testsuite/gm2/pim/fail/tinyfor4.mod @@ -0,0 +1,7 @@ +MODULE tinyfor4 ; + +VAR + v: INTEGER; +BEGIN + FOR i := 0 TO v DO END +END tinyfor4.