+2011-05-03 Richard Guenther <rguenther@suse.de>
+
+ * c-decl.c (grokdeclarator): Instead of looking at
+ TREE_OVERFLOW check if the constant fits in the index type.
+
2011-05-03 Richard Sandiford <richard.sandiford@linaro.org>
* config/arm/neon.md (vec_load_lanes<mode><mode>): New expanders,
convert (index_type,
size_one_node));
- /* If that overflowed, the array is too big. ???
- While a size of INT_MAX+1 technically shouldn't
- cause an overflow (because we subtract 1), the
- overflow is recorded during the conversion to
- index_type, before the subtraction. Handling
- this case seems like an unnecessary
- complication. */
- if (TREE_CODE (itype) == INTEGER_CST
- && TREE_OVERFLOW (itype))
+ /* The above overflows when size does not fit
+ in index_type.
+ ??? While a size of INT_MAX+1 technically shouldn't
+ cause an overflow (because we subtract 1), handling
+ this case seems like an unnecessary complication. */
+ if (TREE_CODE (size) == INTEGER_CST
+ && !int_fits_type_p (size, index_type))
{
if (name)
error_at (loc, "size of array %qE is too large",
+2011-05-03 Richard Guenther <rguenther@suse.de>
+
+ * gcc.dg/large-size-array-5.c: New testcase.
+
2011-05-03 Richard Sandiford <richard.sandiford@linaro.org>
* gcc.dg/vect/vect-strided-u16-i3.c: New test.
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-Wno-overflow" } */
+
+typedef __SIZE_TYPE__ size_t;
+
+extern char a[((size_t)-1 >> 1) + 1]; /* { dg-error "too large" } */
+extern char b[((size_t)-1 >> 1)];
+extern int c[(((size_t)-1 >> 1) + 1) / sizeof(int)]; /* { dg-error "too large" } */
+extern int d[((size_t)-1 >> 1) / sizeof(int)];