The code snippet below compiles on FCFLAGS="-O1" and FCFLAGS="-O2", but gives an ICE on FCFLAGS="-O1 -fschedule-insns". The additional option is supposed to be part of -O2, according to [1].
The problem seems to be target-related as I could not reproduce it on i686-pc-linux-gnu. Code is reduced, but probably not minimal yet. $> cat ice.f90 MODULE class_dummy_atom_kdtree_types TYPE dummy_atom_kdtree_data INTEGER :: dummy END TYPE TYPE :: dummy_atom_kdtree_node TYPE(dummy_atom_kdtree_node_private), POINTER :: p END TYPE TYPE :: dummy_atom_kdtree_node_private TYPE(dummy_atom_kdtree_data) :: data END TYPE TYPE :: dummy_atom_kdtree TYPE(dummy_atom_kdtree_node) :: root END TYPE END MODULE FUNCTION dummy_atom_kdtree_insert(this, item) USE class_dummy_atom_kdtree_types, ONLY: dummy_atom_kdtree, dummy_atom_kdtree_node, dummy_atom_kdtree_data TYPE(dummy_atom_kdtree), INTENT(inout) :: this TYPE(dummy_atom_kdtree_data), INTENT(in) :: item TYPE(dummy_atom_kdtree_data) :: dummy_atom_kdtree_insert TYPE(dummy_atom_kdtree_node) :: parent, current TYPE(dummy_atom_kdtree_node) :: node INTEGER :: cmp, level, discriminator parent = dummy_atom_kdtree_node(null()) current = this%root level = 1 discriminator = 1 DO WHILE (ASSOCIATED( current%p )) discriminator = MODULO(level-1, 3) + 1 cmp = dummy_atom_kdtree_data_compare(item, current%p%data, discriminator) level = level + 1 END DO dummy_atom_kdtree_insert = item END FUNCTION $> gfortran-svn -O1 -fschedule-insns ice.f90 ice.f90: In function 'dummy_atom_kdtree_insert': ice.f90:42: error: unable to find a register to spill in class 'AREG' ice.f90:42: error: this is the insn: (insn 19 31 20 4 ice.f90:37 (parallel [ (set (reg:SI 37 r8 [69]) (truncate:SI (lshiftrt:DI (mult:DI (zero_extend:DI (reg:SI 37 r8 [68])) (zero_extend:DI (reg:SI 42 r13 [78]))) (const_int 32 [0x20])))) (clobber (scratch:SI)) (clobber (reg:CC 17 flags)) ]) 342 {*umulsi3_highpart_insn} (expr_list:REG_DEAD (reg:SI 37 r8 [68]) (expr_list:REG_UNUSED (reg:CC 17 flags) (nil)))) ice.f90:42: internal compiler error: in spill_failure, at reload1.c:1995 Please submit a full bug report, $> gfortran-svn -v gcc version 4.4.0 20080629 (experimental) (GCC) The same holds for 4.3.2. [1] http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#Optimize-Options -- Summary: ICE in spill_failure, reload1.c:1995 Product: gcc Version: 4.4.0 Status: UNCONFIRMED Keywords: ice-on-valid-code Severity: normal Priority: P3 Component: target AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: dfranke at gcc dot gnu dot org GCC host triplet: x86_64-unknown-linux-gnu http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36680