https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88535
john henning <mailboxnotfound at yahoo dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |mailboxnotfound at yahoo dot com --- Comment #2 from john henning <mailboxnotfound at yahoo dot com> --- Thank you Rainer for reproducing this and filing the bug. As the originator of the complaint, I (john henning) add a few more points. All of my attempts were with gcc 8.2.0; failures were observed on 2 different SPARC Solaris 11 systems, one with 11.4 and one with 11.5. (1) dwarf2out.o is the only object that differs. (2) output_file_names is the only routine within dwarf2out.o to have a differing size (according to nm) (3) An early difference (possibly the first) seems to be the code that is generated for dwarf2out.c line 12301 $ cat -n ../gcc-8.2.0/gcc/dwarf2out.c | head -12312 | tail -17 12296 /* If there are more than 65536 directories, we have to use 12297 DW_FORM_udata, DW_FORM_data2 can't refer to them. 12298 Otherwise, compute what space would occupy if all the indexes 12299 used DW_FORM_udata - sum - and compare that to how large would 12300 be DW_FORM_data2 encoding, and pick the more efficient one. */ 12301 else if (ndirs + idx_offset <= 65536) 12302 { 12303 unsigned HOST_WIDE_INT sum = 1; 12304 for (i = 0; i < numfiles; i++) 12305 { 12306 int file_idx = backmap[i]; 12307 int dir_idx = dirs[files[file_idx].dir_idx].dir_idx; 12308 sum += size_of_uleb128 (dir_idx); 12309 } 12310 if (sum >= HOST_WIDE_INT_UC (2) * (numfiles + 1)) 12311 idx_form = DW_FORM_data2; 12312 Here are the first 40 instructions for that line, according to gdb (shrunk/excerpted to fit a small number of columns for ease of side-by-side viewing): $ gdb -q stage2-gcc/lto1 $ gdb -q stage3-gcc/lto1 . break dwarf2out.c:12301 . break dwarf2out.c:12301 Breakpoint 1 at 0x435fb8: file Breakpoint 1 at 0x435fb0: file gcc-8.2.0/gcc/dwarf2out.c, line 12301 gcc-8.2.0/gcc/dwarf2out.c, line 12301 . x/40i 0x435fb8 . x/40i 0x435fb0 sethi %hi(0x10000), %g1 sethi %hi(0x10000), %g1 cmp %l0, %g1 cmp %l0, %g1 bg %icc, 0x436164 <output_file_name bg %icc, 0x436188 <output_file_name clr %o1 clr %o1 clr %l0 clr %l0 cmp %i4, 0 cmp %i4, 0 ble,pn %icc, 0x436030 <output_file ble,pn %icc, 0x436054 <output_file mov 1, %l1 mov 1, %l1 mov %l6, %l7 mov %l2, %g1 add %l5, %l6, %l5 st %l3, [ %fp + -24 ] st %i2, [ %fp + -20 ] mov %i0, %l2 st %i3, [ %fp + -24 ] mov %i2, %l3 ld [ %l7 ], %g1 mov %i1, %i0 smul %g1, 0x14, %g1 add %l5, %l6, %l5 add %i5, %g1, %g1 st %i4, [ %fp + -20 ] ld [ %g1 + 0x10 ], %g1 mov %l6, %i1 smul %g1, 0x14, %g1 mov %i5, %i2 add %l4, %g1, %g1 mov %g1, %l7 ld [ %g1 + 0x10 ], %o1 ld [ %i1 ], %g1 call 0x40af9c <size_of_uleb128(unsi> smul %g1, 0x14, %g1 sra %o1, 0x1f, %o0 add %i2, %g1, %g1 addcc %l1, %o0, %l1 ld [ %g1 + 0x10 ], %g1 sra %o0, 0x1f, %i2 smul %g1, 0x14, %g1 add %l7, 4, %l7 add %l4, %g1, %g1 addc %l0, %i2, %l0 ld [ %g1 + 0x10 ], %o1 cmp %l7, %l5 call 0x40af94 <size_of_uleb128(unsi bne,a %icc, 0x435fec <output_file_ sra %o1, 0x1f, %o0 ld [ %l7 ], %g1 addcc %l1, %o0, %l1 ld [ %fp + -20 ], %i2 sra %o0, 0x1f, %i4 ld [ %fp + -24 ], %i3 add %i1, 4, %i1 addcc %l2, %l2, %o5 addc %l0, %i4, %l0 addc %l3, %l3, %o4 cmp %i1, %l5 cmp %o4, %l0 bne,a %icc, 0x435ffc <output_file_ bgu %icc, 0x436164 <output_file_nam ld [ %i1 ], %g1 clr %o1 mov %i0, %i1 bne %icc, 0x436060 <output_file_nam mov %i2, %i5 mov 2, %o2 mov %l2, %i0 cmp %o5, %l1 mov %l3, %i2 bgu,a %icc, 0x43616c <output_file_ ld [ %fp + -20 ], %i4 mov 1, %o0 mov %l7, %l2