The following simplified test case from galgel SEGV's when using -O3 -ftree-loop-linear with the latest gcc-4_1-branch. It compiles fine with both mainline and the gcc_4_1_1_release branch.
vervain% cat grsyst.f Subroutine Diffun (A, B, NS, N) Real*8 A, B Integer NS, N Dimension A(NS,NS), B(NS,NS) A(1:N,1:N) = B(1:N,1:N) End vervain:% gfortran -O3 -ftree-loop-linear -S grsyst.f grsyst.f: In function diffun: grsyst.f:1: internal compiler error: Segmentation fault Please submit a full bug report, with preprocessed source if appropriate. See <URL:http://gcc.gnu.org/bugs.html> for instructions. Here's a backtrace that shows we take the SEGV due to a null pointer dereference in exit_phi_for_loop_p() because loop->single_exit is null. (gdb) bt #0 exit_phi_for_loop_p (loop=0x1078ab20, stmt=0x400dfa00) at tree-flow-inline.h:172 #1 0x10527a90 in gcc_loopnest_to_lambda_loopnest (currloops=0x10763578, loop_nest=0x1078ab20, inductionvars=0xffffdb78, invariants=0xffffdb7c) at /home/bergner/gcc/gcc-4.1/gcc/lambda-code.c:2242 #2 0x1050fa70 in linear_transform_loops (loops=0x10763578) at /home/bergner/gcc/gcc-4.1/gcc/tree-loop-linear.c:338 #3 0x1046f4d0 in tree_linear_transform () at /home/bergner/gcc/gcc-4.1/gcc/tree-ssa-loop.c:225 #4 0x1038beb4 in execute_one_pass (pass=0x106dad60) at /home/bergner/gcc/gcc-4.1/gcc/passes.c:827 #5 0x1038bffc in execute_pass_list (pass=0x106dad60) at /home/bergner/gcc/gcc-4.1/gcc/passes.c:859 #6 0x1038c014 in execute_pass_list (pass=0x106dae64) at /home/bergner/gcc/gcc-4.1/gcc/passes.c:860 #7 0x1038c014 in execute_pass_list (pass=0x106d609c) at /home/bergner/gcc/gcc-4.1/gcc/passes.c:860 #8 0x100985b4 in tree_rest_of_compilation (fndecl=0x400ec300) at /home/bergner/gcc/gcc-4.1/gcc/tree-optimize.c:419 #9 0x10060fb8 in gfc_expand_function (fndecl=0x400ec300) at /home/bergner/gcc/gcc-4.1/gcc/fortran/f95-lang.c:223 #10 0x103e6c8c in cgraph_expand_function (node=0x400e9850) at /home/bergner/gcc/gcc-4.1/gcc/cgraphunit.c:1058 #11 0x103e8a08 in cgraph_optimize () at /home/bergner/gcc/gcc-4.1/gcc/cgraphunit.c:1124 #12 0x100664cc in gfc_be_parse_file (set_yydebug=276343584) at /home/bergner/gcc/gcc-4.1/gcc/fortran/f95-lang.c:293 #13 0x10350bb4 in toplev_main (argc=275644416, argv=0x1073a2e4) at /home/bergner/gcc/gcc-4.1/gcc/toplev.c:991 #14 0x100943bc in main (argc=276343584, argv=0x400dfa00) at /home/bergner/gcc/gcc-4.1/gcc/main.c:35 (gdb) list exit_phi_for_loop_p 2181 2182 static bool 2183 exit_phi_for_loop_p (struct loop *loop, tree stmt) 2184 { 2185 2186 if (TREE_CODE (stmt) != PHI_NODE 2187 || PHI_NUM_ARGS (stmt) != 1 2188 || bb_for_stmt (stmt) != loop->single_exit->dest) 2189 return false; 2190 (gdb) p loop->single_exit $1 = 0x0 -- Summary: SPEC CPU2000 178.galgel ICE using -O3 -ftree-loop-linear Product: gcc Version: 4.1.2 Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: bergner at vnet dot ibm dot com GCC build triplet: powerpc64-linux GCC host triplet: powerpc64-linux GCC target triplet: powerpc64-linux http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29290