https://gcc.gnu.org/g:8f173da4520ddf64f3926580042f1103146bf0bd

commit r15-4551-g8f173da4520ddf64f3926580042f1103146bf0bd
Author: Jakub Jelinek <ja...@redhat.com>
Date:   Tue Oct 22 20:20:23 2024 +0200

    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  <ja...@redhat.com>
    
            PR c/117190
            * varasm.cc (array_size_for_constructor): For RAW_DATA_CST,
            use bitsize_int rather than size_int.

Diff:
---
 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;
     }

Reply via email to