https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98513
Martin Liška <marxin at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |ASSIGNED Assignee|unassigned at gcc dot gnu.org |marxin at gcc dot gnu.org --- Comment #1 from Martin Liška <marxin at gcc dot gnu.org> --- A cleaner test-case: $ cat combined.cc extern unsigned long long var_20; extern unsigned short arr_8[][26][1][1][11]; const int &max(int &a, const int &b) { return a > b ? a : b; } int test___trans_tmp_1, var_5 = -1, var_6 = -2; void test(int var_5, int var_6, signed char arr_1[1][1][1]) { for (unsigned i_0 = 0; i_0 < 21; i_0 += 2) for (int i_2 = 0; i_2 < 8; i_2 += 82) { for (int i_3 = 0; i_3 < test___trans_tmp_1; i_3++) for (short i_4 = 0; i_4 < 20; i_4 += 4) var_20 = max(var_5, 0); for (int i_5 = 0; i_5 < 19; i_5 += 20) for (int i_6 = var_6 + 2; i_6 < var_5 + 3; i_6++) arr_8[3][2][i_2][i_5][i_6] = arr_1[0][0][0]; } } unsigned long long var_20; signed char arr_1[1][1][1]; unsigned short arr_8[22][26][1][1][11]; int main() { test(var_5, var_6, arr_1); } Optimized dump contains: <bb 11> [local count: 17523394]: _93 = MEM[(signed char[26][19] *)arr_1_31(D) + 1482B][2][0]; _94 = (short unsigned int) _93; arr_8[3][2][0][0][-2147483648] = _94; <---- HERE if (i_6_103 > _131) goto <bb 9>; [11.00%] else goto <bb 12>; [89.00%] which is instruction that causes the segfault. I'm going to take a look.