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