[Bug fortran/42517] Bogus runtime error with -fopenmp -fcheck=recursion

janus at gcc dot gnu dot org gcc-bugzilla@gcc.gnu.org
Sun Dec 27 18:39:00 GMT 2009



------- 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



More information about the Gcc-bugs mailing list