]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
c: fix wrong encoding for zero-sized arrays [PR125618] master trunk
authorMartin Uecker <uecker@tugraz.at>
Sat, 6 Jun 2026 13:08:19 +0000 (15:08 +0200)
committerMartin Uecker <uecker@gcc.gnu.org>
Sat, 6 Jun 2026 21:56:52 +0000 (23:56 +0200)
This reverts one change from 106970adca69c9c577e6c75f4e69a08cd9ea2df0
that replaced build_range_type with build_index_type.  In the function
complete_array_type this breaks zero-sized arrays created from an empty
initializer which there are represented using the C++ FE way [0, -1]
causing issues on 32 bit architectures.

After this partial revert this representation remains inconsistent to
the usual C FE representation [0, NULL_TREE] (as before by change).

PR c/125618

gcc/c-family/ChangeLog:
* c-common.cc (complete_array_type): Change back to using
build_range_type.

gcc/c-family/c-common.cc

index ba72278bd5227b99edc631851d87d8e5036a1e4b..a16288f4441c4734b50ab523b5dbe841abfb5dc6 100644 (file)
@@ -7457,7 +7457,9 @@ complete_array_type (tree *ptype, tree initial_value, bool do_default)
      TYPE_LANG_FLAG_? bits that the front end may have set.  */
   main_type = build_distinct_type_copy (TYPE_MAIN_VARIANT (type));
   TREE_TYPE (main_type) = unqual_elt;
-  TYPE_DOMAIN (main_type) = build_index_type (maxindex);
+  TYPE_DOMAIN (main_type)
+    = build_range_type (TREE_TYPE (maxindex),
+                       build_int_cst (TREE_TYPE (maxindex), 0), maxindex);
   TYPE_TYPELESS_STORAGE (main_type) = TYPE_TYPELESS_STORAGE (type);
   layout_type (main_type);