The fix for pr89797 committed in r270326 was limited to targets with NUM_POLY_INT_COEFFS == 1 which I think is all but aarch64. The tests for the fix have been failing with an ICE on aarch64 because it suffers from more or less the same problem but in its own target-specific code. Attached is the patch I posted yesterday that fixes the ICE, successfully bootstrapped and regtested on x86_64-linux. I also ran the dg.exp=*attr* and aarch64.exp tests with an aarch64-linux-elf cross-compiler. There are no ICEs but there are tons of errors in the latter tests because many (most?) either expect to be able to find libc headers or link executables (I have not built libc for aarch64).
I'm around tomorrow but then traveling the next two weeks (with no connectivity the first week) so I unfortunately won't be able to fix whatever this change might break until the week of May 6. Jeff, if you have an aarch64 tester that could verify this patch tomorrow that would help give us some confidence. Otherwise, another option to consider for the time being is to xfail the tests on aarch64. Thanks Martin
PR middle-end/89797 - ICE on a vector_size (1LU << 33) int variable gcc/ChangeLog: PR middle-end/89797 * tree.h (TYPE_VECTOR_SUBPARTS): Correct computation when NUM_POLY_INT_COEFFS == 2. Use HOST_WIDE_INT_1U. * config/aarch64/aarch64.c (aarch64_simd_vector_alignment): Avoid assuming type size fits in SHWI. Index: gcc/tree.h =================================================================== --- gcc/tree.h (revision 270418) +++ gcc/tree.h (working copy) @@ -3735,13 +3735,13 @@ TYPE_VECTOR_SUBPARTS (const_tree node) if (NUM_POLY_INT_COEFFS == 2) { poly_uint64 res = 0; - res.coeffs[0] = 1 << (precision & 0xff); + res.coeffs[0] = HOST_WIDE_INT_1U << (precision & 0xff); if (precision & 0x100) - res.coeffs[1] = 1 << (precision & 0xff); + res.coeffs[1] = HOST_WIDE_INT_1U << ((precision & 0x100) >> 16); return res; } else - return (unsigned HOST_WIDE_INT)1 << precision; + return HOST_WIDE_INT_1U << precision; } /* Set the number of elements in VECTOR_TYPE NODE to SUBPARTS, which must Index: gcc/config/aarch64/aarch64.c =================================================================== --- gcc/config/aarch64/aarch64.c (revision 270418) +++ gcc/config/aarch64/aarch64.c (working copy) @@ -14924,7 +14924,10 @@ aarch64_simd_vector_alignment (const_tree type) be set for non-predicate vectors of booleans. Modes are the most direct way we have of identifying real SVE predicate types. */ return GET_MODE_CLASS (TYPE_MODE (type)) == MODE_VECTOR_BOOL ? 16 : 128; - HOST_WIDE_INT align = tree_to_shwi (TYPE_SIZE (type)); + tree size = TYPE_SIZE (type); + unsigned HOST_WIDE_INT align = 128; + if (tree_fits_uhwi_p (size)) + align = tree_to_uhwi (TYPE_SIZE (type)); return MIN (align, 128); }