In 64 bit mode (default) with ' -O3 -funsafe-math-optimizations
-ffinite-math-only' revision 158105 miscompiles doduc.f90:

 MAIN : FIN S00002
 MAIN : FIN S00001
 MAIN : FIN S00011
 MAIN : FIN S00022
 TEMPS =     33.00000000 , NITERA :          1
 TEMPS =     34.00030857 , NITERA :        186
 TEMPS =     35.00175832 , NITERA :        948
 TEMPS =     36.00201433 , NITERA :       1506
 TEMPS =     37.00275274 , NITERA :       1761
 TEMPS =     38.00327697 , NITERA :       2041
 TEMPS =     39.00023711 , NITERA :       2323
 TEMPS =     40.00315505 , NITERA :       2604
 TEMPS =     45.00271328 , NITERA :       4015
 TEMPS =     50.00242267 , NITERA :       5490
 TEMPS =     55.00059079 , NITERA :       6982
 TEMPS =     60.00004761 , NITERA :       8683
Segmentation fault

instead of

 MAIN : FIN S00002
 MAIN : FIN S00001
 MAIN : FIN S00011
 MAIN : FIN S00022
 TEMPS =     33.00000000 , NITERA :          1
 TEMPS =     34.00031041 , NITERA :        186
 TEMPS =     35.00458344 , NITERA :        952
 TEMPS =     36.00231683 , NITERA :       1503
 TEMPS =     37.00204661 , NITERA :       1752
 TEMPS =     38.00184041 , NITERA :       2030
 TEMPS =     39.00285193 , NITERA :       2313
 TEMPS =     40.00039336 , NITERA :       2592
 TEMPS =     45.00193388 , NITERA :       4002
 TEMPS =     50.00313592 , NITERA :       5477
 TEMPS =     55.00087838 , NITERA :       6968
 TEMPS =     60.00257489 , NITERA :       8304
 TEMPS =     70.00018172 , NITERA :      10771
...
 TEMPS =   1960.00148831 , NITERA :     522874
 TEMPS =   1970.00230662 , NITERA :     525415
 TEMPS =   1980.00310479 , NITERA :     527956
 TEMPS =   1990.00392388 , NITERA :     530497
 TEMPS =   2000.00080221 , NITERA :     533037

In 32 bit mode (with -m32) the compilation is OK

 MAIN : FIN S00002
 MAIN : FIN S00001
 MAIN : FIN S00011
 MAIN : FIN S00022
 TEMPS =     33.00000000 , NITERA :          1
 TEMPS =     34.00030835 , NITERA :        186
 TEMPS =     35.00463561 , NITERA :        950
 TEMPS =     36.00171759 , NITERA :       1507
 TEMPS =     37.00181750 , NITERA :       1759
 TEMPS =     38.00134840 , NITERA :       2037
 TEMPS =     39.00251558 , NITERA :       2320
 TEMPS =     40.00202537 , NITERA :       2599
 TEMPS =     45.00267592 , NITERA :       4007
 TEMPS =     50.00070886 , NITERA :       5482
 TEMPS =     55.00040603 , NITERA :       6974
 TEMPS =     60.00064786 , NITERA :       8664
 TEMPS =     70.00043350 , NITERA :      14927
...
 TEMPS =   1960.00239009 , NITERA :     526412
 TEMPS =   1970.00318777 , NITERA :     528953
 TEMPS =   1980.00005908 , NITERA :     531493
 TEMPS =   1990.00088071 , NITERA :     534034
 TEMPS =   2000.00168409 , NITERA :     536575

The culprit is the subroutine S33022. I'll attach the source for this routine,
the doduc.f90 source with the routine commented and the assembly codes for
S33022 with revision 158104 or older and with revision 158105 or newer.

When compiled with any revision and linked with the object from s33022_w.s, the
code works, but not when linked with the object from s33022_n.s.


-- 
           Summary: [4.6 Regression] Revision 158105 miscompiles doduc.f90
           Product: gcc
           Version: 4.6.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: dominiq at lps dot ens dot fr
 GCC build triplet: x86_64-apple-darwin10
  GCC host triplet: x86_64-apple-darwin10
GCC target triplet: x86_64-apple-darwin10


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43716

Reply via email to