From: Gaius Mulley Date: Fri, 21 Apr 2023 12:19:54 +0000 (+0100) Subject: PR modula2/109586 cc1gm2 ICE when compiling large source files. X-Git-Tag: basepoints/gcc-15~9999 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a7e1ee39e4fa37d005929c4ff9457d1a199559c6;p=thirdparty%2Fgcc.git PR modula2/109586 cc1gm2 ICE when compiling large source files. The function m2block_RememberConstant calls m2tree_IsAConstant. However IsAConstant does not recognise TREE_CODE(t) == CONSTRUCTOR as a constant. Without this patch CONSTRUCTOR contants are garbage collected (and not preserved) resulting in a corrupt tree and crash. gcc/m2/ChangeLog: PR modula2/109586 * gm2-gcc/m2tree.cc (m2tree_IsAConstant): Add (TREE_CODE (t) == CONSTRUCTOR) to expression. Signed-off-by: Gaius Mulley --- diff --git a/gcc/m2/gm2-gcc/m2tree.cc b/gcc/m2/gm2-gcc/m2tree.cc index 33dc57d5df76..0fc2fe57b632 100644 --- a/gcc/m2/gm2-gcc/m2tree.cc +++ b/gcc/m2/gm2-gcc/m2tree.cc @@ -120,8 +120,8 @@ bool m2tree_IsAConstant (tree t) { return (TREE_CODE (t) == INTEGER_CST) || (TREE_CODE (t) == REAL_CST) - || (TREE_CODE (t) == REAL_CST) || (TREE_CODE (t) == COMPLEX_CST) - || (TREE_CODE (t) == STRING_CST); + || (TREE_CODE (t) == REAL_CST) || (TREE_CODE (t) == COMPLEX_CST) + || (TREE_CODE (t) == STRING_CST) || (TREE_CODE (t) == CONSTRUCTOR); }