------- Comment #28 from dominiq at lps dot ens dot fr 2009-01-18 12:06 ------- The difference between the results of -fdump-tree-optimized for the cases
aner = '' ANER(1)='A ' ANER(2)=' ' and ANER(1)='A ' ANER(2)=' ' aner = '' is ('pre' with the bug, 'rev' without it) --- pr38868_red_2.f90-pre 2009-01-18 12:42:15.000000000 +0100 +++ pr38868_red_2.f90-rev 2009-01-18 12:41:33.000000000 +0100 @@ -16,6 +16,8 @@ <bb 2>: _gfortran_set_options (8, &options.0); + aner[0] = "A "; + aner[1] = " "; ivtmp.33 = 0; <bb 3>: @@ -27,8 +29,6 @@ goto <bb 3>; <bb 4>: - aner[0] = "A "; - aner[1] = " "; __builtin_memcpy (&line, &" "[1]{lb: 1 sz: 1}, 1); __builtin_memset (&line[2]{lb: 1 sz: 1}, 32, 79); __builtin_memcpy (&line[78]{lb: 1 sz: 1}, &"xyz"[1]{lb: 1 sz: 1}, 3); Can anyone see the difference between the two marked lines? The hexdump for the diff without -u is: 00000000 31 38 61 31 39 2c 32 30 0a 3e 20 20 20 61 6e 65 |18a19,20.> ane| 00000010 72 5b 30 5d 20 3d 20 22 41 20 20 20 22 3b 0a 3e |r[0] = "A ";.>| 00000020 20 20 20 61 6e 65 72 5b 31 5d 20 3d 20 22 20 20 | aner[1] = " | 00000030 20 20 22 3b 0a 33 30 2c 33 31 64 33 31 0a 3c 20 | ";.30,31d31.< | 00000040 20 20 61 6e 65 72 5b 30 5d 20 3d 20 22 41 20 20 | aner[0] = "A | 00000050 20 22 3b 0a 3c 20 20 20 61 6e 65 72 5b 31 5d 20 | ";.< aner[1] | 00000060 3d 20 22 20 20 20 20 22 3b 0a |= " ";.| The difference between the assembly is: --- pr38868_red_2.s-pre 2009-01-18 12:50:15.000000000 +0100 +++ pr38868_red_2.s-rev 2009-01-18 12:51:04.000000000 +0100 @@ -26,34 +26,34 @@ leal _options.0.1497-"L00000000001$pb"(%ebx), %eax movl %eax, 4(%esp) call L__gfortran_set_options$stub - xorl %eax, %eax + movl LC0-"L00000000001$pb"(%ebx), %eax leal -96(%ebp), %edx + movl %eax, -96(%ebp) + movl LC1-"L00000000001$pb"(%ebx), %eax + movl %eax, -92(%ebp) + xorl %eax, %eax .align 4,0x90 L2: movl $538976288, (%edx,%eax,4) addl $1, %eax cmpl $18, %eax jne L2 - movl LC0-"L00000000001$pb"(%ebx), %eax leal -172(%ebp), %edi - movl $19, %ecx - leal -176(%ebp), %esi - movb $32, -176(%ebp) - movb $32, -175(%ebp) - movl %eax, -96(%ebp) - movl LC1-"L00000000001$pb"(%ebx), %eax - movw $8224, -174(%ebp) - movw $31096, -99(%ebp) - movb $122, -97(%ebp) - movl %eax, -92(%ebp) movl $538976288, %eax + movl $19, %ecx rep stosl leal LC2-"L00000000001$pb"(%ebx), %eax leal -680(%ebp), %edi movl %eax, -672(%ebp) leal LC3-"L00000000001$pb"(%ebx), %eax + leal -176(%ebp), %esi movl %eax, -632(%ebp) movl %edi, (%esp) + movb $32, -176(%ebp) + movb $32, -175(%ebp) + movw $8224, -174(%ebp) + movw $31096, -99(%ebp) + movb $122, -97(%ebp) movl $11, -668(%ebp) movl $5, -628(%ebp) movl $4096, -680(%ebp) -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38868