https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79904
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jakub at gcc dot gnu.org --- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> --- For signed integer overflow sanitized vector +/-/*, the code is emitted from internal-fn.c calling generic expansion routines. I have no idea what s390.c complains about here, why is it wrong. What internal-fn.c does is it tries to expand: VIEW_CONVERT_EXPR<signed char[8]>({ 3, 3, 3, 3, 3, 3, 3, 3 })[D.2328]; The vector has DImode, is VCEd to array of 8 chars, and then array accessed. internal-fn.c uses: op1 = fold_build1_loc (loc, VIEW_CONVERT_EXPR, atype, arg1); op1 = build4_loc (loc, ARRAY_REF, eltype, op1, cntv, NULL_TREE, NULL_TREE); where arg1 is VECTOR_CST and later that op1 is expanded using expand_normal. I can certainly as optimization deal there with uniform vectors, will attach a patch for that momentarily, but that doesn't fix: /* PR sanitizer/79904 */ /* { dg-do compile } */ /* { dg-options "-fsanitize=signed-integer-overflow" } */ typedef signed char V __attribute__((vector_size (8))); void foo (V *a) { *a = *a * (V) { 3, 4, 5, 6, 7, 8, 9, 10 }; } which still ICEs. I must say I don't see anything wrong here on the middle-end side.