re PR fortran/18918 (Eventually support Fortran 2008's coarrays [co-arrays])
authorTobias Burnus <burnus@net-b.de>
Wed, 6 Apr 2011 18:29:55 +0000 (20:29 +0200)
committerTobias Burnus <burnus@gcc.gnu.org>
Wed, 6 Apr 2011 18:29:55 +0000 (20:29 +0200)
2011-04-06  Tobias Burnus  <burnus@net-b.de>

        PR fortran/18918
        * caf/mpi.c (_gfortran_caf_init, _gfortran_caf_finalize):
        Add global variable caf_mpi_initialized and use it for when
        finalizing.

From-SVN: r172059

libgfortran/ChangeLog
libgfortran/caf/mpi.c

index bae9d3c5d45f6af2efc5305d52d7ca01edaf132f..e8f714a2f75f60618198c035cb7ea5b50d00a727 100644 (file)
@@ -1,3 +1,10 @@
+2011-04-06  Tobias Burnus  <burnus@net-b.de>
+
+       PR fortran/18918
+       * caf/mpi.c (_gfortran_caf_init, _gfortran_caf_finalize):
+       Add global variable caf_mpi_initialized and use it for when
+       finalizing.
+
 2011-04-04  Tobias Burnus  <burnus@net-b.de>
 
        * unix.c: Adapt stat DEFINEs since MinGW64 supports LFS.
index 634e240bf19e314cbd0120326ce39c5335448d4a..9e4db916c85fbe92813ce3e98a70c9cacb380f2b 100644 (file)
@@ -36,6 +36,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 static void error_stop (int error) __attribute__ ((noreturn));
 
 /* Global variables.  */
+static int caf_mpi_initialized;
 static int caf_this_image;
 static int caf_num_images;
 static MPI_Win caf_world_window;
@@ -50,12 +51,10 @@ static MPI_Win caf_world_window;
 void
 _gfortran_caf_init (int *argc, char ***argv, int *this_image, int *num_images)
 {
-  int flag;
-
-  /* The following is only the case if one does not have a Fortran
-     main program. */
-  MPI_Initialized (&flag);
-  if (!flag)
+  /* caf_mpi_initialized is only true if the main program is not written in
+     Fortran.  */
+  MPI_Initialized (&caf_mpi_initialized);
+  if (!caf_mpi_initialized)
     MPI_Init (argc, argv);
 
   MPI_Comm_rank (MPI_COMM_WORLD, &caf_this_image);
@@ -69,15 +68,15 @@ _gfortran_caf_init (int *argc, char ***argv, int *this_image, int *num_images)
 }
 
 
-/* Finalize coarray program. Note: This is only called before the
-   program ends; thus the MPI_Initialized status of _gfortran_caf_init
-   does not play a role.  */
+/* Finalize coarray program.   */
 
 void
 _gfortran_caf_finalize (void)
 {
   MPI_Win_free (&caf_world_window);
-  MPI_Finalize ();
+
+  if (!caf_mpi_initialized)
+    MPI_Finalize ();
 }