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

2009-12-29 Thread janus at gcc dot gnu dot org


--- Comment #2 from janus at gcc dot gnu dot org  2009-12-29 19:30 ---
Subject: Bug 42517

Author: janus
Date: Tue Dec 29 19:29:54 2009
New Revision: 155506

URL: http://gcc.gnu.org/viewcvs?root=gccview=revrev=155506
Log:
gcc/fortran/
2009-12-29  Janus Weil  ja...@gcc.gnu.org

PR fortran/42517
* invoke.texi: Document the interference of
-fcheck=recursion and -fopenmp.
* trans-decl.c (gfc_generate_function_code): Disable -fcheck=recursion
when used with -fopenmp.

gcc/testsuite/
2009-12-29  Janus Weil  ja...@gcc.gnu.org

PR fortran/42517
* gfortran.dg/gomp/recursion1.f90: New test.

Added:
trunk/gcc/testsuite/gfortran.dg/gomp/recursion1.f90
Modified:
trunk/gcc/fortran/ChangeLog
trunk/gcc/fortran/invoke.texi
trunk/gcc/fortran/trans-decl.c
trunk/gcc/testsuite/ChangeLog


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42517



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

2009-12-27 Thread janus at gcc dot gnu dot org


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