http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48352
Jerry DeLisle <jvdelisle at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jvdelisle at gcc dot | |gnu.org --- Comment #2 from Jerry DeLisle <jvdelisle at gcc dot gnu.org> 2011-03-31 04:56:02 UTC --- This fixes it. Index: gcc/fortran/frontend-passes.c =================================================================== --- gcc/fortran/frontend-passes.c (revision 171769) +++ gcc/fortran/frontend-passes.c (working copy) @@ -334,6 +334,8 @@ cfe_code (gfc_code **c, int *walk_subtrees ATTRIBU static void optimize_namespace (gfc_namespace *ns) { + if (!ns->code) + return; current_ns = ns; Regression tested. trim_optimize_2.f90 fails but I do not know if this is because the patterns are changed or this patch is just disabling the optimizations. Also moving the check down a little bit still works, as follows. Index: gcc/fortran/frontend-passes.c =================================================================== --- gcc/fortran/frontend-passes.c (revision 171769) +++ gcc/fortran/frontend-passes.c (working copy) @@ -334,11 +334,14 @@ cfe_code (gfc_code **c, int *walk_subtrees ATTRIBU static void optimize_namespace (gfc_namespace *ns) { - current_ns = ns; gfc_code_walker (&ns->code, cfe_code, cfe_expr_0, NULL); + gfc_code_walker (&ns->code, optimize_code, optimize_expr, NULL); + + if (!ns->code) + return; for (ns = ns->contained; ns; ns = ns->sibling) optimize_namespace (ns); I think somewhere while walking the code, the code pointer is getting bashed or for this test case, it really is null. Hope this at least gives some hints.