https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82050
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jakub at gcc dot gnu.org --- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> --- In: 1418 static column_range 1419 get_affected_columns (const fixit_hint *hint) 1420 { 1421 int start_column = LOCATION_COLUMN (hint->get_start_loc ()); 1422 int finish_column = LOCATION_COLUMN (hint->get_next_loc ()) - 1; 1423 1424 return column_range (start_column, finish_column); (gdb) p hint->get_start_loc () $3 = 438112 (gdb) p hint->get_next_loc () $4 = 307392 (gdb) p expand_location ($3) $5 = {file = 0x7fffffffe3d1 "pr82050.c", line = 14, column = 4086, data = 0x0, sysp = false} (gdb) p expand_location ($4) $6 = {file = 0x7fffffffe3d1 "pr82050.c", line = 14, column = 1, data = 0x0, sysp = false} so finish_column is 0 and smaller than start_column, which is what column_range ICEs on. Is that because we have: /* Do not track column numbers higher than this one. As a result, the range of column_bits is [12, 18] (or 0 if column numbers are disabled). */ const unsigned int LINE_MAP_MAX_COLUMN_NUMBER = (1U << 12); and thus effectively can only track columns up to 4095 (or 4096 if 1 based)? If so, something should punt on it rather than ICE it is not possible.