diff options
author | Gaius Mulley <gaiusmod2@gmail.com> | 2023-04-21 13:19:54 +0100 |
---|---|---|
committer | Gaius Mulley <gaiusmod2@gmail.com> | 2023-04-21 13:19:54 +0100 |
commit | a7e1ee39e4fa37d005929c4ff9457d1a199559c6 (patch) | |
tree | 69044e6be9a89e990e4055adcc15fe8d353552b7 /gcc | |
parent | cddfe6bc40b3dc0806e260bbfb4cac82d609a258 (diff) | |
download | gcc-a7e1ee39e4fa37d005929c4ff9457d1a199559c6.zip gcc-a7e1ee39e4fa37d005929c4ff9457d1a199559c6.tar.gz gcc-a7e1ee39e4fa37d005929c4ff9457d1a199559c6.tar.bz2 |
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 <gaiusmod2@gmail.com>
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/m2/gm2-gcc/m2tree.cc | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/gcc/m2/gm2-gcc/m2tree.cc b/gcc/m2/gm2-gcc/m2tree.cc index 33dc57d..0fc2fe5 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); } |