diff options
author | Tobias Burnus <burnus@gcc.gnu.org> | 2014-05-08 18:55:23 +0200 |
---|---|---|
committer | Tobias Burnus <burnus@gcc.gnu.org> | 2014-05-08 18:55:23 +0200 |
commit | d62cf3dfbe72b168d9bde08b34e2a190cdf7eb33 (patch) | |
tree | 778c1f6a41dea0e8e0d26817d32358e245d22ded /gcc/fortran/intrinsic.c | |
parent | 272325bd6abba598a8f125dab36b626acb648b03 (diff) | |
download | gcc-d62cf3dfbe72b168d9bde08b34e2a190cdf7eb33.zip gcc-d62cf3dfbe72b168d9bde08b34e2a190cdf7eb33.tar.gz gcc-d62cf3dfbe72b168d9bde08b34e2a190cdf7eb33.tar.bz2 |
check.c (check_co_minmaxsum, [...]): New.
gcc/fortran/
2014-05-08 Tobias Burnus <burnus@net-b.de>
* check.c (check_co_minmaxsum, gfc_check_co_minmax,
gfc_check_co_sum): New.
* error.c (gfc_notify_std): Update -std=f2008ts.
* gfortran.h (gfc_isym_id): Add GFC_ISYM_CO_MAX,
GFC_ISYM_CO_MIN, GFC_ISYM_CO_SUM.
* intrinsic.h (gfc_check_co_minmax,
gfc_check_co_sum): Declare.
* intrinsic.c (add_subroutines): Add co_min, co_max
and co_sum.
(gfc_check_intrinsic_standard): Update text for
-std=f2008ts.
* intrinsic.texi (CO_MIN, CO_MAX, CO_SUM): Document
them.
* invoke.texi (-std=f2008ts): Update wording.
* trans.h (gfor_fndecl_co_max,
gfor_fndecl_co_min, gfor_fndecl_co_sum): Define.
* trans-decl.c (gfor_fndecl_co_max,
gfor_fndecl_co_min, gfor_fndecl_co_sum): Define.
(gfc_build_builtin_function_decls): Assign to it.
* trans-intrinsic.c (conv_co_minmaxsum): New.
(gfc_conv_intrinsic_subroutine): Call it.
libgfortran/
2014-05-08 Tobias Burnus <burnus@net-b.de>
* caf/libcaf.h (caf_vector_t, _gfortran_caf_co_sum,
_gfortran_caf_co_min, _gfortran_caf_co_max): Declare
* caf/single.c
gcc/testsuite/
2014-05-08 Tobias Burnus <burnus@net-b.de>
* gfortran.dg/coarray_collectives_1.f90: New.
* gfortran.dg/coarray_collectives_2.f90: New.
* gfortran.dg/coarray_collectives_3.f90: New.
* gfortran.dg/coarray_collectives_4.f90: New.
* gfortran.dg/coarray_collectives_5.f90: New.
* gfortran.dg/coarray_collectives_6.f90: New.
* gfortran.dg/coarray/collectives_1.f90: New.
* gfortran.dg/assumed_rank_5.f90: Update dg-error.
* gfortran.dg/assumed_type_4.f90: Update dg-error.
* gfortran.dg/bind_c_array_params.f03: Update dg-error.
* gfortran.dg/bind_c_usage_28.f90: Update dg-error.
* gfortran.dg/c_funloc_tests_5.f03: Update dg-error.
* gfortran.dg/c_funloc_tests_6.f90: Update dg-error.
* gfortran.dg/c_loc_tests_11.f03: Update dg-error.
From-SVN: r210223
Diffstat (limited to 'gcc/fortran/intrinsic.c')
-rw-r--r-- | gcc/fortran/intrinsic.c | 32 |
1 files changed, 29 insertions, 3 deletions
diff --git a/gcc/fortran/intrinsic.c b/gcc/fortran/intrinsic.c index 19d4620..852ae92 100644 --- a/gcc/fortran/intrinsic.c +++ b/gcc/fortran/intrinsic.c @@ -3004,7 +3004,7 @@ add_subroutines (void) { /* Argument names as in the standard (to be used as argument keywords). */ const char - *h = "harvest", *dt = "date", *vl = "values", *pt = "put", + *a = "a", *h = "harvest", *dt = "date", *vl = "values", *pt = "put", *c = "count", *tm = "time", *tp = "topos", *gt = "get", *t = "to", *zn = "zone", *fp = "frompos", *cm = "count_max", *f = "from", *sz = "size", *ln = "len", *cr = "count_rate", @@ -3013,7 +3013,8 @@ add_subroutines (void) *trim_name = "trim_name", *ut = "unit", *han = "handler", *sec = "seconds", *res = "result", *of = "offset", *md = "mode", *whence = "whence", *pos = "pos", *ptr = "ptr", *p1 = "path1", - *p2 = "path2", *msk = "mask", *old = "old"; + *p2 = "path2", *msk = "mask", *old = "old", *result_image = "result_image", + *stat = "stat", *errmsg = "errmsg"; int di, dr, dc, dl, ii; @@ -3209,6 +3210,31 @@ add_subroutines (void) "fptr", BT_UNKNOWN, 0, REQUIRED, INTENT_OUT); make_from_module(); + /* Coarray collectives. */ + add_sym_4s ("co_max", GFC_ISYM_CO_MAX, CLASS_IMPURE, + BT_UNKNOWN, 0, GFC_STD_F2008_TS, + gfc_check_co_minmax, NULL, NULL, + a, BT_REAL, dr, REQUIRED, INTENT_INOUT, + result_image, BT_INTEGER, di, OPTIONAL, INTENT_IN, + stat, BT_INTEGER, di, OPTIONAL, INTENT_OUT, + errmsg, BT_CHARACTER, dc, OPTIONAL, INTENT_OUT); + + add_sym_4s ("co_min", GFC_ISYM_CO_MIN, CLASS_IMPURE, + BT_UNKNOWN, 0, GFC_STD_F2008_TS, + gfc_check_co_minmax, NULL, NULL, + a, BT_REAL, dr, REQUIRED, INTENT_INOUT, + result_image, BT_INTEGER, di, OPTIONAL, INTENT_IN, + stat, BT_INTEGER, di, OPTIONAL, INTENT_OUT, + errmsg, BT_CHARACTER, dc, OPTIONAL, INTENT_OUT); + + add_sym_4s ("co_sum", GFC_ISYM_CO_SUM, CLASS_IMPURE, + BT_UNKNOWN, 0, GFC_STD_F2008_TS, + gfc_check_co_sum, NULL, NULL, + a, BT_REAL, dr, REQUIRED, INTENT_INOUT, + result_image, BT_INTEGER, di, OPTIONAL, INTENT_IN, + stat, BT_INTEGER, di, OPTIONAL, INTENT_OUT, + errmsg, BT_CHARACTER, dc, OPTIONAL, INTENT_OUT); + /* More G77 compatibility garbage. */ add_sym_3s ("alarm", GFC_ISYM_ALARM, CLASS_IMPURE, BT_UNKNOWN, 0, GFC_STD_GNU, gfc_check_alarm_sub, NULL, gfc_resolve_alarm_sub, @@ -4160,7 +4186,7 @@ gfc_check_intrinsic_standard (const gfc_intrinsic_sym* isym, break; case GFC_STD_F2008_TS: - symstd_msg = "new in TS 29113"; + symstd_msg = "new in TS 29113/TS 18508"; break; case GFC_STD_GNU: |