diff options
author | Tobias Burnus <burnus@net-b.de> | 2010-04-06 21:03:10 +0200 |
---|---|---|
committer | Tobias Burnus <burnus@gcc.gnu.org> | 2010-04-06 21:03:10 +0200 |
commit | f4d1d50a5a78c87a06a269f25fbfc7ff29896d14 (patch) | |
tree | 44ad7701af6f733236c159c4af2013f131e90322 /gcc | |
parent | 377949813aecca7f8c1ede0c28d3de708eb5d06a (diff) | |
download | gcc-f4d1d50a5a78c87a06a269f25fbfc7ff29896d14.zip gcc-f4d1d50a5a78c87a06a269f25fbfc7ff29896d14.tar.gz gcc-f4d1d50a5a78c87a06a269f25fbfc7ff29896d14.tar.bz2 |
re PR fortran/18918 (Eventually support Fortran 2008's coarrays [co-arrays])
2010-04-06 Tobias Burnus <burnus@net-b.de>
PR fortran/18918
* array.c (gfc_match_array_spec): Add error for -fcoarray=none.
* match.c (gfc_match_critical, sync_statement): Ditto.
* gfortran.h (gfc_fcoarray): New enum.
(gfc_option_t): Use it.
* lang.opt (fcoarray): Add new flag.
* invoke.texi (fcoarray): Document it.
* options.c (gfc_init_options,gfc_handle_option): Handle
* -fcoarray=.
(gfc_handle_coarray_option): New function.
2010-04-06 Tobias Burnus <burnus@net-b.de>
PR fortran/18918
* gfortran.dg/coarray_2.f90: Add dg-options -fcoarray=single.
* gfortran.dg/coarray_3.f90: Ditto.
* gfortran.dg/coarray_4.f90: Ditto.
* gfortran.dg/coarray_5.f90: Ditto.
* gfortran.dg/coarray_6.f90: Ditto.
* gfortran.dg/coarray_7.f90: Ditto.
* gfortran.dg/coarray_8.f90: Ditto.
* gfortran.dg/coarray_9.f90: New -fcoarray=none test.
From-SVN: r158016
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 12 | ||||
-rw-r--r-- | gcc/fortran/array.c | 6 | ||||
-rw-r--r-- | gcc/fortran/gfortran.h | 8 | ||||
-rw-r--r-- | gcc/fortran/invoke.texi | 18 | ||||
-rw-r--r-- | gcc/fortran/lang.opt | 4 | ||||
-rw-r--r-- | gcc/fortran/match.c | 12 | ||||
-rw-r--r-- | gcc/fortran/options.c | 16 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/coarray_2.f90 | 1 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/coarray_3.f90 | 1 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/coarray_4.f90 | 1 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/coarray_6.f90 | 1 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/coarray_9.f90 | 17 |
13 files changed, 105 insertions, 2 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index b1db67a..9725d8e2 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,6 +1,18 @@ 2010-04-06 Tobias Burnus <burnus@net-b.de> PR fortran/18918 + * array.c (gfc_match_array_spec): Add error for -fcoarray=none. + * match.c (gfc_match_critical, sync_statement): Ditto. + * gfortran.h (gfc_fcoarray): New enum. + (gfc_option_t): Use it. + * lang.opt (fcoarray): Add new flag. + * invoke.texi (fcoarray): Document it. + * options.c (gfc_init_options,gfc_handle_option): Handle -fcoarray=. + (gfc_handle_coarray_option): New function. + +2010-04-06 Tobias Burnus <burnus@net-b.de> + + PR fortran/18918 * gfortran.h (gfc_array_spec): Add cotype. * array.c (gfc_match_array_spec,gfc_set_array_spec): Use it and defer error diagnostic. diff --git a/gcc/fortran/array.c b/gcc/fortran/array.c index c291ad8..4282fd1 100644 --- a/gcc/fortran/array.c +++ b/gcc/fortran/array.c @@ -458,6 +458,12 @@ coarray: == FAILURE) goto cleanup; + if (gfc_option.coarray == GFC_FCOARRAY_NONE) + { + gfc_error ("Coarrays disabled at %C, use -fcoarray= to enable"); + goto cleanup; + } + for (;;) { as->corank++; diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h index 2bf0ef8..f4f5d52 100644 --- a/gcc/fortran/gfortran.h +++ b/gcc/fortran/gfortran.h @@ -563,6 +563,13 @@ typedef enum } init_local_integer; +typedef enum +{ + GFC_FCOARRAY_NONE = 0, + GFC_FCOARRAY_SINGLE +} +gfc_fcoarray; + /************************* Structures *****************************/ /* Used for keeping things in balanced binary trees. */ @@ -2158,6 +2165,7 @@ typedef struct int fpe; int rtcheck; + gfc_fcoarray coarray; int warn_std; int allow_std; diff --git a/gcc/fortran/invoke.texi b/gcc/fortran/invoke.texi index 6d3681d..0a3dd7d 100644 --- a/gcc/fortran/invoke.texi +++ b/gcc/fortran/invoke.texi @@ -166,8 +166,8 @@ and warnings}. @gccoptlist{-fno-automatic -ff2c -fno-underscoring @gol -fwhole-file -fsecond-underscore @gol -fbounds-check -fcheck-array-temporaries -fmax-array-constructor =@var{n} @gol --fcheck=@var{<all|array-temps|bounds|do|mem|pointer|recursion>} --fmax-stack-var-size=@var{n} @gol +-fcheck=@var{<all|array-temps|bounds|do|mem|pointer|recursion>} @gol +-fcoarray=@var{<none|single>} -fmax-stack-var-size=@var{n} @gol -fpack-derived -frepack-arrays -fshort-enums -fexternal-blas @gol -fblas-matmul-limit=@var{n} -frecursive -finit-local-zero @gol -finit-integer=@var{n} -finit-real=@var{<zero|inf|-inf|nan|snan>} @gol @@ -1212,6 +1212,20 @@ is implemented as a reference to the link-time external symbol for compatibility with @command{g77} and @command{f2c}, and is implied by use of the @option{-ff2c} option. +@item -fcoarray=@var{<keyword>} +@opindex @code{fcoarray} +@cindex coarrays + +@table @asis +@item @samp{none} +Disable coarray support; using coarray declarations and image-control +statements will produce a compile-time error. (Default) + +@item @samp{single} +Single-image mode, i.e. @code{num_images()} is always one. +@end table + + @item -fcheck=@var{<keyword>} @opindex @code{fcheck} @cindex array, bounds checking diff --git a/gcc/fortran/lang.opt b/gcc/fortran/lang.opt index 751749e..1438aa2 100644 --- a/gcc/fortran/lang.opt +++ b/gcc/fortran/lang.opt @@ -348,6 +348,10 @@ frepack-arrays Fortran Copy array sections into a contiguous block on procedure entry +fcoarray= +Fortran RejectNegative JoinedOrMissing +-fcoarray=[...] Specify which coarray parallelization should be used + fcheck= Fortran RejectNegative JoinedOrMissing -fcheck=[...] Specify which runtime checks are to be performed diff --git a/gcc/fortran/match.c b/gcc/fortran/match.c index e719628..70bf9ac 100644 --- a/gcc/fortran/match.c +++ b/gcc/fortran/match.c @@ -1743,6 +1743,12 @@ gfc_match_critical (void) == FAILURE) return MATCH_ERROR; + if (gfc_option.coarray == GFC_FCOARRAY_NONE) + { + gfc_error ("Coarrays disabled at %C, use -fcoarray= to enable"); + return MATCH_ERROR; + } + if (gfc_find_state (COMP_CRITICAL) == SUCCESS) { gfc_error ("Nested CRITICAL block at %C"); @@ -2138,6 +2144,12 @@ sync_statement (gfc_statement st) == FAILURE) return MATCH_ERROR; + if (gfc_option.coarray == GFC_FCOARRAY_NONE) + { + gfc_error ("Coarrays disabled at %C, use -fcoarray= to enable"); + return MATCH_ERROR; + } + if (gfc_find_state (COMP_CRITICAL) == SUCCESS) { gfc_error ("Image control statement SYNC at %C in CRITICAL block"); diff --git a/gcc/fortran/options.c b/gcc/fortran/options.c index 0ad87f4..676bbe1 100644 --- a/gcc/fortran/options.c +++ b/gcc/fortran/options.c @@ -130,6 +130,7 @@ gfc_init_options (unsigned int argc, const char **argv) gfc_option.fpe = 0; gfc_option.rtcheck = 0; + gfc_option.coarray = GFC_FCOARRAY_NONE; /* Argument pointers cannot point to anything but their argument. */ flag_argument_noalias = 3; @@ -480,6 +481,18 @@ gfc_handle_fpe_trap_option (const char *arg) static void +gfc_handle_coarray_option (const char *arg) +{ + if (strcmp (arg, "none") == 0) + gfc_option.coarray = GFC_FCOARRAY_NONE; + else if (strcmp (arg, "single") == 0) + gfc_option.coarray = GFC_FCOARRAY_SINGLE; + else + gfc_fatal_error ("Argument to -fcoarray is not valid: %s", arg); +} + + +static void gfc_handle_runtime_check_option (const char *arg) { int result, pos = 0, n; @@ -931,6 +944,9 @@ gfc_handle_option (size_t scode, const char *arg, int value) gfc_handle_runtime_check_option (arg); break; + case OPT_fcoarray_: + gfc_handle_coarray_option (arg); + break; } return result; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 2e03520..a485fcb 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,6 +1,16 @@ 2010-04-06 Tobias Burnus <burnus@net-b.de> PR fortran/18918 + * gfortran.dg/coarray_2.f90: Add dg-options -fcoarray=single. + * gfortran.dg/coarray_3.f90: Ditto. + * gfortran.dg/coarray_4.f90: Ditto. + * gfortran.dg/coarray_5.f90: Ditto. + * gfortran.dg/coarray_6.f90: Ditto. + * gfortran.dg/coarray_9.f90: New -fcoarray=none test. + +2010-04-06 Tobias Burnus <burnus@net-b.de> + + PR fortran/18918 * gfortran.dg/coarray_4.f90: Fix test. * gfortran.dg/coarray_6.f90: Add more tests. diff --git a/gcc/testsuite/gfortran.dg/coarray_2.f90 b/gcc/testsuite/gfortran.dg/coarray_2.f90 index 1fcb9b8..902a0dd 100644 --- a/gcc/testsuite/gfortran.dg/coarray_2.f90 +++ b/gcc/testsuite/gfortran.dg/coarray_2.f90 @@ -1,4 +1,5 @@ ! { dg-do run } +! { dg-options "-fcoarray=single" } ! { dg-shouldfail "error stop" } ! ! Coarray support diff --git a/gcc/testsuite/gfortran.dg/coarray_3.f90 b/gcc/testsuite/gfortran.dg/coarray_3.f90 index 648f2fa..63c3bd3 100644 --- a/gcc/testsuite/gfortran.dg/coarray_3.f90 +++ b/gcc/testsuite/gfortran.dg/coarray_3.f90 @@ -1,4 +1,5 @@ ! { dg-do compile } +! { dg-options "-fcoarray=single" } ! ! Coarray support ! PR fortran/18918 diff --git a/gcc/testsuite/gfortran.dg/coarray_4.f90 b/gcc/testsuite/gfortran.dg/coarray_4.f90 index cb693ea..5607ec9 100644 --- a/gcc/testsuite/gfortran.dg/coarray_4.f90 +++ b/gcc/testsuite/gfortran.dg/coarray_4.f90 @@ -1,4 +1,5 @@ ! { dg-do compile } +! { dg-options "-fcoarray=single" } ! ! Coarray support -- corank declarations ! PR fortran/18918 diff --git a/gcc/testsuite/gfortran.dg/coarray_6.f90 b/gcc/testsuite/gfortran.dg/coarray_6.f90 index b6d8b49..d3c600b 100644 --- a/gcc/testsuite/gfortran.dg/coarray_6.f90 +++ b/gcc/testsuite/gfortran.dg/coarray_6.f90 @@ -1,4 +1,5 @@ ! { dg-do compile } +! { dg-options "-fcoarray=single" } ! ! Coarray support -- corank declarations ! PR fortran/18918 diff --git a/gcc/testsuite/gfortran.dg/coarray_9.f90 b/gcc/testsuite/gfortran.dg/coarray_9.f90 new file mode 100644 index 0000000..d44cdda --- /dev/null +++ b/gcc/testsuite/gfortran.dg/coarray_9.f90 @@ -0,0 +1,17 @@ +! { dg-do compile } +! +! PR fortran/18918 +! +! Check for error if no -fcoarray= option has been given +! + +integer :: a +integer :: b[*] ! { dg-error "Coarrays disabled" } + +error stop "Error" +sync all ! { dg-error "Coarrays disabled" } + +critical ! { dg-error "Coarrays disabled" } +end critical ! { dg-error "Expecting END PROGRAM statement" } + +end |