------- Comment #1 from janus at gcc dot gnu dot org 2009-12-27 18:39 ------- An easy way to fix this is to simply disable the recursion check if -fopenmp is given:
Index: gcc/fortran/trans-decl.c =================================================================== --- gcc/fortran/trans-decl.c (revision 155479) +++ gcc/fortran/trans-decl.c (working copy) @@ -4318,7 +4318,8 @@ gfc_generate_function_code (gfc_namespace * ns) is_recursive = sym->attr.recursive || (sym->attr.entry_master && sym->ns->entries->sym->attr.recursive); - if ((gfc_option.rtcheck & GFC_RTCHECK_RECURSION) && !is_recursive) + if ((gfc_option.rtcheck & GFC_RTCHECK_RECURSION) && !is_recursive + && !gfc_option.flag_openmp) { char * msg; @@ -4395,7 +4396,8 @@ gfc_generate_function_code (gfc_namespace * ns) gfc_add_expr_to_block (&block, tmp); /* Reset recursion-check variable. */ - if ((gfc_option.rtcheck & GFC_RTCHECK_RECURSION) && !is_recursive) + if ((gfc_option.rtcheck & GFC_RTCHECK_RECURSION) && !is_recursive + && !gfc_option.flag_openmp) { gfc_add_modify (&block, recurcheckvar, boolean_false_node); recurcheckvar = NULL; @@ -4426,7 +4428,8 @@ gfc_generate_function_code (gfc_namespace * ns) { gfc_add_expr_to_block (&block, tmp); /* Reset recursion-check variable. */ - if ((gfc_option.rtcheck & GFC_RTCHECK_RECURSION) && !is_recursive) + if ((gfc_option.rtcheck & GFC_RTCHECK_RECURSION) && !is_recursive + && !gfc_option.flag_openmp) { gfc_add_modify (&block, recurcheckvar, boolean_false_node); recurcheckvar = NULL; -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42517