https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71506
--- Comment #4 from Tom de Vries <vries at gcc dot gnu.org> --- At the first call to build_linearized_memory_access, at the 3rd loop iteration we have: ... (gdb) 133 subsize = isl_set_max_val (pdr->extent, aff); (gdb) call (char *) isl_printer_get_str(isl_printer_print_set(isl_printer_to_str(ctx), pdr->extent)) $5 = 0x30f6b90 "{ [1, i1, i2, i3, i4] : i4 >= 0 and i1 >= 0 and i2 >= 0 and i3 >= 0 and i4 <= 1 and i3 <= 1 }" (gdb) call (char *) isl_printer_get_str(isl_printer_print_aff(isl_printer_to_str(ctx), aff)) $6 = 0x30f5e30 "{ [i0, i1, i2, i3, i4] -> [(i2)] }" (gdb) n 134 isl_aff_free (aff); (gdb) call (char *) isl_printer_get_str(isl_printer_print_val(isl_printer_to_str(ctx), subsize)) $7 = 0x30f8f00 "infty" ... The infinity in subsize is propagated to size, and then 'res = isl_constraint_set_coefficient_val (res, isl_dim_out, offset + i, size)' ICEs because isl_constraint_set_coefficient_val expects the last argument to be an int. In 5.0, subsize is an isl_val: ... isl_val *subsize; ... subsize = isl_set_max_val (pdr->extent, aff); ... But in 4.9, subsize is an isl_int: ... isl_int subsize; ... isl_set_max (pdr->extent, aff, &subsize); ... And at the same point in execution, subsize is 1 instead of infty (which seems to be caused by subsize being 1 before the call, and isl_set_max not having an effect, which sound fishy).