From 8f173da4520ddf64f3926580042f1103146bf0bd Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Tue, 22 Oct 2024 20:20:23 +0200 Subject: [PATCH] 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. --- gcc/varasm.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/varasm.cc b/gcc/varasm.cc index 92b105a4089a..0b3e8005cd31 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; } -- GitLab