aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2024-10-22 20:20:23 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2024-10-22 20:21:17 +0200
commit8f173da4520ddf64f3926580042f1103146bf0bd (patch)
tree937c57c95abd763e31b4b9adc3e04c4152440cc1
parent1bdeebe69b71bf23c9bcd9965a736a5c1e0d5f83 (diff)
downloadgcc-8f173da4520ddf64f3926580042f1103146bf0bd.zip
gcc-8f173da4520ddf64f3926580042f1103146bf0bd.tar.gz
gcc-8f173da4520ddf64f3926580042f1103146bf0bd.tar.bz2
varasm: Fix up RAW_DATA_CST handling in array_size_for_constructor [PR117190]
CONSTRUCTOR indices for arrays have bitsize type, and the r15-4375 patch actually got it right in 6 other spots, but not in this function, where it used size_int rather than bitsize_int and so size_binop can ICE on type mismatch. This is covered by the init-5.c testcase I've just posted, though the ICE goes away when the C FE is fixed (and when it is not, there is another ICE). 2024-10-22 Jakub Jelinek <jakub@redhat.com> PR c/117190 * varasm.cc (array_size_for_constructor): For RAW_DATA_CST, use bitsize_int rather than size_int.
-rw-r--r--gcc/varasm.cc2
1 files changed, 1 insertions, 1 deletions
diff --git a/gcc/varasm.cc b/gcc/varasm.cc
index 92b105a..0b3e800 100644
--- a/gcc/varasm.cc
+++ b/gcc/varasm.cc
@@ -5488,7 +5488,7 @@ array_size_for_constructor (tree val)
index = TREE_OPERAND (index, 1);
if (value && TREE_CODE (value) == RAW_DATA_CST)
index = size_binop (PLUS_EXPR, index,
- size_int (RAW_DATA_LENGTH (value) - 1));
+ bitsize_int (RAW_DATA_LENGTH (value) - 1));
if (max_index == NULL_TREE || tree_int_cst_lt (max_index, index))
max_index = index;
}