>> >> Btw, with the arrival of the F2018 standard, I wonder whether it >> >> actually makes sense to keep the option -std=f2008ts, or to remove it >> >> in favor of -std=f2018, since the two Technical Specifications covered >> >> by this flag are now part of F2018 (and pretty much the main part!). >> >> Any opinions on this? >> > >> > I think that f2008ts can go away. We may need to do this >> > in two step as some users may have f2008ts hardcoded in >> > Makefiles. Probably, issue warning for -std=2008ts and >> > map it to -std=2018 for a brief period (3 to 6 months?) >> > and then finally remove it. >> >> Yes, I agree that it would be a good idea to keep -std=f2008ts as an >> alias for f2018 for a while (possibly until the next release, 9.0), >> and document is as deprecated. I can take care of removing the >> GFC_STD_F2008_TS macro in a follow-up patch. > > Sounds good to me.
So, here is the promised follow-up patch. It mostly removes GFC_STD_F2008_TS and replaces it by GFC_STD_F2018 in a mechanical manner. Plus, it fixes the resulting fallout in the testsuite and updates the documentation. The non-mechanical parts are libgfortran.h and options.c. Regtests cleanly. Ok for trunk with a suitable ChangeLog? Cheers, Janus
Index: gcc/fortran/array.c =================================================================== --- gcc/fortran/array.c (revision 260433) +++ gcc/fortran/array.c (working copy) @@ -533,7 +533,7 @@ gfc_match_array_spec (gfc_array_spec **asp, bool m as->type = AS_ASSUMED_RANK; as->rank = -1; - if (!gfc_notify_std (GFC_STD_F2008_TS, "Assumed-rank array at %C")) + if (!gfc_notify_std (GFC_STD_F2018, "Assumed-rank array at %C")) goto cleanup; if (!match_codim) Index: gcc/fortran/check.c =================================================================== --- gcc/fortran/check.c (revision 260433) +++ gcc/fortran/check.c (working copy) @@ -1136,7 +1136,7 @@ gfc_check_atomic (gfc_expr *atom, int atom_no, gfc if (!kind_value_check (stat, stat_no, gfc_default_integer_kind)) return false; - if (!gfc_notify_std (GFC_STD_F2008_TS, "STAT= argument to %s at %L", + if (!gfc_notify_std (GFC_STD_F2018, "STAT= argument to %s at %L", gfc_current_intrinsic, &stat->where)) return false; } @@ -1349,7 +1349,7 @@ gfc_check_event_query (gfc_expr *event, gfc_expr * if (!variable_check (stat, 2, false)) return false; - if (!gfc_notify_std (GFC_STD_F2008_TS, "STAT= argument to %s at %L", + if (!gfc_notify_std (GFC_STD_F2018, "STAT= argument to %s at %L", gfc_current_intrinsic, &stat->where)) return false; } @@ -4745,7 +4745,7 @@ gfc_check_c_f_pointer (gfc_expr *cptr, gfc_expr *f } if (fptr->rank > 0 && !is_c_interoperable (fptr, &msg, false, true)) - return gfc_notify_std (GFC_STD_F2008_TS, "Noninteroperable array FPTR " + return gfc_notify_std (GFC_STD_F2018, "Noninteroperable array FPTR " "at %L to C_F_POINTER: %s", &fptr->where, msg); return true; @@ -4786,7 +4786,7 @@ gfc_check_c_f_procpointer (gfc_expr *cptr, gfc_exp } if (!attr.is_bind_c) - return gfc_notify_std (GFC_STD_F2008_TS, "Noninteroperable procedure " + return gfc_notify_std (GFC_STD_F2018, "Noninteroperable procedure " "pointer at %L to C_F_PROCPOINTER", &fptr->where); return true; @@ -4829,7 +4829,7 @@ gfc_check_c_funloc (gfc_expr *x) } if (!attr.is_bind_c) - return gfc_notify_std (GFC_STD_F2008_TS, "Noninteroperable procedure " + return gfc_notify_std (GFC_STD_F2018, "Noninteroperable procedure " "at %L to C_FUNLOC", &x->where); return true; } @@ -4883,7 +4883,7 @@ gfc_check_c_loc (gfc_expr *x) } if (x->rank - && !gfc_notify_std (GFC_STD_F2008_TS, + && !gfc_notify_std (GFC_STD_F2018, "Noninteroperable array at %L as" " argument to C_LOC: %s", &x->where, msg)) return false; @@ -5267,7 +5267,7 @@ gfc_check_num_images (gfc_expr *distance, gfc_expr if (!scalar_check (distance, 0)) return false; - if (!gfc_notify_std (GFC_STD_F2008_TS, "DISTANCE= argument to " + if (!gfc_notify_std (GFC_STD_F2018, "DISTANCE= argument to " "NUM_IMAGES at %L", &distance->where)) return false; } @@ -5280,7 +5280,7 @@ gfc_check_num_images (gfc_expr *distance, gfc_expr if (!scalar_check (failed, 1)) return false; - if (!gfc_notify_std (GFC_STD_F2008_TS, "FAILED= argument to " + if (!gfc_notify_std (GFC_STD_F2018, "FAILED= argument to " "NUM_IMAGES at %L", &failed->where)) return false; } @@ -5366,7 +5366,7 @@ gfc_check_this_image (gfc_expr *coarray, gfc_expr if (!scalar_check (distance, 2)) return false; - if (!gfc_notify_std (GFC_STD_F2008_TS, "DISTANCE= argument to " + if (!gfc_notify_std (GFC_STD_F2018, "DISTANCE= argument to " "THIS_IMAGE at %L", &distance->where)) return false; Index: gcc/fortran/decl.c =================================================================== --- gcc/fortran/decl.c (revision 260433) +++ gcc/fortran/decl.c (working copy) @@ -1401,7 +1401,7 @@ gfc_verify_c_interop_param (gfc_symbol *sym) not have the allocatable, pointer, or optional attributes, according to J3/04-007, section 5.1. */ if (sym->attr.allocatable == 1 - && !gfc_notify_std (GFC_STD_F2008_TS, "Variable %qs at %L with " + && !gfc_notify_std (GFC_STD_F2018, "Variable %qs at %L with " "ALLOCATABLE attribute in procedure %qs " "with BIND(C)", sym->name, &(sym->declared_at), @@ -1409,7 +1409,7 @@ gfc_verify_c_interop_param (gfc_symbol *sym) retval = false; if (sym->attr.pointer == 1 - && !gfc_notify_std (GFC_STD_F2008_TS, "Variable %qs at %L with " + && !gfc_notify_std (GFC_STD_F2018, "Variable %qs at %L with " "POINTER attribute in procedure %qs " "with BIND(C)", sym->name, &(sym->declared_at), @@ -1434,7 +1434,7 @@ gfc_verify_c_interop_param (gfc_symbol *sym) retval = false; } else if (sym->attr.optional == 1 - && !gfc_notify_std (GFC_STD_F2008_TS, "Variable %qs " + && !gfc_notify_std (GFC_STD_F2018, "Variable %qs " "at %L with OPTIONAL attribute in " "procedure %qs which is BIND(C)", sym->name, &(sym->declared_at), @@ -1445,7 +1445,7 @@ gfc_verify_c_interop_param (gfc_symbol *sym) either assumed size or explicit shape. Deferred shape is already covered by the pointer/allocatable attribute. */ if (sym->as != NULL && sym->as->type == AS_ASSUMED_SHAPE - && !gfc_notify_std (GFC_STD_F2008_TS, "Assumed-shape array %qs " + && !gfc_notify_std (GFC_STD_F2018, "Assumed-shape array %qs " "at %L as dummy argument to the BIND(C) " "procedure %qs at %L", sym->name, &(sym->declared_at), @@ -3846,8 +3846,7 @@ gfc_match_decl_type_spec (gfc_typespec *ts, int im gfc_error ("Assumed type at %C is not allowed for components"); return MATCH_ERROR; } - if (!gfc_notify_std (GFC_STD_F2008_TS, "Assumed type " - "at %C")) + if (!gfc_notify_std (GFC_STD_F2018, "Assumed type at %C")) return MATCH_ERROR; ts->type = BT_ASSUMED; return MATCH_YES; Index: gcc/fortran/error.c =================================================================== --- gcc/fortran/error.c (revision 260433) +++ gcc/fortran/error.c (working copy) @@ -855,8 +855,6 @@ notify_std_msg(int std) return _("Fortran 2018 obsolescent feature:"); else if (std & GFC_STD_F2018) return _("Fortran 2018:"); - else if (std & GFC_STD_F2008_TS) - return "TS 29113/TS 18508:"; else if (std & GFC_STD_F2008_OBS) return _("Fortran 2008 obsolescent feature:"); else if (std & GFC_STD_F2008) Index: gcc/fortran/gfortran.texi =================================================================== --- gcc/fortran/gfortran.texi (revision 260433) +++ gcc/fortran/gfortran.texi (working copy) @@ -533,8 +533,7 @@ Specification @code{Further Interoperability of Fo (ISO/IEC TS 29113:2012). Full support of those standards and future Fortran standards is planned. The current status of the support is can be found in the @ref{Fortran 2003 status}, @ref{Fortran 2008 -status}, @ref{TS 29113 status}, @ref{TS 18508 status} and @ref{Fortran -2018 status} sections of the documentation. +status} and @ref{Fortran 2018 status} sections of the documentation. Additionally, the GNU Fortran compilers supports the OpenMP specification (version 4.0 and most of the features of the 4.5 version, @@ -793,8 +792,6 @@ compile option was used. @menu * Fortran 2003 status:: * Fortran 2008 status:: -* TS 29113 status:: -* TS 18508 status:: * Fortran 2018 status:: @end menu @@ -1096,9 +1093,30 @@ arrays are supported for named constants (@code{PA -@node TS 29113 status -@section Technical Specification 29113 Status +@node Fortran 2018 status +@section Status of Fortran 2018 support +So far very little work has been done to support Fortran 2018. + +@itemize +@item ERROR STOP in a PURE procedure +An @code{ERROR STOP} statement is permitted in a @code{PURE} +procedure. + +@item IMPLICIT NONE with a spec-list +Support the @code{IMPLICIT NONE} statement with an +@code{implicit-none-spec-list}. + +@item Behavior of INQUIRE with the RECL= specifier + +The behavior of the @code{INQUIRE} statement with the @code{RECL=} +specifier now conforms to Fortran 2018. + +@end itemize + + +@subsection TS 29113 Status (Further Interoperability with C) + GNU Fortran supports some of the new features of the Technical Specification (TS) 29113 on Further Interoperability of Fortran with C. The @uref{https://gcc.gnu.org/wiki/TS29113Status, wiki} has some information @@ -1108,8 +1126,6 @@ following is implemented. See also @ref{Further Interoperability of Fortran with C}. @itemize -@item The @option{-std=f2008ts} option. - @item The @code{OPTIONAL} attribute is allowed for dummy arguments of @code{BIND(C) procedures.} @@ -1125,9 +1141,9 @@ of the TS is not yet supported. @end itemize -@node TS 18508 status -@section Technical Specification 18508 Status +@subsection TS 18508 Status (Additional Parallel Features) + GNU Fortran supports the following new features of the Technical Specification 18508 on Additional Parallel Features in Fortran: @@ -1147,27 +1163,6 @@ polymorphic components. @end itemize -@node Fortran 2018 status -@section Status of Fortran 2018 support - -So far very little work has been done to support Fortran 2018. - -@itemize -@item ERROR STOP in a PURE procedure -An @code{ERROR STOP} statement is permitted in a @code{PURE} -procedure. - -@item IMPLICIT NONE with a spec-list -Support the @code{IMPLICIT NONE} statement with an -@code{implicit-none-spec-list}. - -@item Behavior of INQUIRE with the RECL= specifier - -The behavior of the @code{INQUIRE} statement with the @code{RECL=} -specifier now conforms to Fortran 2018. - -@end itemize - @c --------------------------------------------------------------------- @c Compiler Characteristics @c --------------------------------------------------------------------- Index: gcc/fortran/intrinsic.c =================================================================== --- gcc/fortran/intrinsic.c (revision 260433) +++ gcc/fortran/intrinsic.c (working copy) @@ -1849,7 +1849,7 @@ add_functions (void) mo, BT_UNKNOWN, 0, REQUIRED); add_sym_2 ("failed_images", GFC_ISYM_FAILED_IMAGES, CLASS_TRANSFORMATIONAL, - ACTUAL_NO, BT_INTEGER, dd, GFC_STD_F2008_TS, + ACTUAL_NO, BT_INTEGER, dd, GFC_STD_F2018, gfc_check_failed_or_stopped_images, gfc_simplify_failed_or_stopped_images, gfc_resolve_failed_images, team, BT_VOID, di, OPTIONAL, @@ -1947,7 +1947,7 @@ add_functions (void) make_generic ("getpid", GFC_ISYM_GETPID, GFC_STD_GNU); add_sym_1 ("get_team", GFC_ISYM_GET_TEAM, CLASS_TRANSFORMATIONAL, - ACTUAL_NO, BT_INTEGER, di, GFC_STD_F2008_TS, + ACTUAL_NO, BT_INTEGER, di, GFC_STD_F2018, gfc_check_get_team, NULL, gfc_resolve_get_team, level, BT_INTEGER, di, OPTIONAL); @@ -2102,7 +2102,7 @@ add_functions (void) ca, BT_REAL, dr, REQUIRED, sub, BT_INTEGER, ii, REQUIRED); add_sym_2 ("image_status", GFC_ISYM_IMAGE_STATUS, CLASS_ELEMENTAL, ACTUAL_NO, - BT_INTEGER, di, GFC_STD_F2008_TS, gfc_check_image_status, + BT_INTEGER, di, GFC_STD_F2018, gfc_check_image_status, gfc_simplify_image_status, gfc_resolve_image_status, image, BT_INTEGER, di, REQUIRED, team, BT_VOID, di, OPTIONAL); @@ -2715,9 +2715,9 @@ add_functions (void) make_generic ("range", GFC_ISYM_RANGE, GFC_STD_F95); add_sym_1 ("rank", GFC_ISYM_RANK, CLASS_INQUIRY, ACTUAL_NO, BT_INTEGER, di, - GFC_STD_F2008_TS, gfc_check_rank, gfc_simplify_rank, gfc_resolve_rank, + GFC_STD_F2018, gfc_check_rank, gfc_simplify_rank, gfc_resolve_rank, a, BT_REAL, dr, REQUIRED); - make_generic ("rank", GFC_ISYM_RANK, GFC_STD_F2008_TS); + make_generic ("rank", GFC_ISYM_RANK, GFC_STD_F2018); add_sym_2 ("real", GFC_ISYM_REAL, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F77, gfc_check_real, gfc_simplify_real, gfc_resolve_real, @@ -3017,7 +3017,7 @@ add_functions (void) make_generic ("stat", GFC_ISYM_STAT, GFC_STD_GNU); add_sym_2 ("stopped_images", GFC_ISYM_STOPPED_IMAGES, CLASS_TRANSFORMATIONAL, - ACTUAL_NO, BT_INTEGER, dd, GFC_STD_F2008_TS, + ACTUAL_NO, BT_INTEGER, dd, GFC_STD_F2018, gfc_check_failed_or_stopped_images, gfc_simplify_failed_or_stopped_images, gfc_resolve_stopped_images, team, BT_VOID, di, OPTIONAL, @@ -3070,7 +3070,7 @@ add_functions (void) make_generic ("tanh", GFC_ISYM_TANH, GFC_STD_F77); add_sym_1 ("team_number", GFC_ISYM_TEAM_NUMBER, CLASS_TRANSFORMATIONAL, - ACTUAL_YES, BT_INTEGER, di, GFC_STD_F2008_TS, + ACTUAL_YES, BT_INTEGER, di, GFC_STD_F2018, gfc_check_team_number, NULL, gfc_resolve_team_number, team, BT_DERIVED, di, OPTIONAL); @@ -3344,7 +3344,7 @@ add_subroutines (void) stat, BT_INTEGER, di, OPTIONAL, INTENT_OUT); add_sym_5s ("atomic_cas", GFC_ISYM_ATOMIC_CAS, CLASS_ATOMIC, - BT_UNKNOWN, 0, GFC_STD_F2008_TS, + BT_UNKNOWN, 0, GFC_STD_F2018, gfc_check_atomic_cas, NULL, NULL, "atom", BT_INTEGER, di, REQUIRED, INTENT_INOUT, "old", BT_INTEGER, di, REQUIRED, INTENT_OUT, @@ -3353,7 +3353,7 @@ add_subroutines (void) stat, BT_INTEGER, di, OPTIONAL, INTENT_OUT); add_sym_3s ("atomic_add", GFC_ISYM_ATOMIC_ADD, CLASS_ATOMIC, - BT_UNKNOWN, 0, GFC_STD_F2008_TS, + BT_UNKNOWN, 0, GFC_STD_F2018, gfc_check_atomic_op, NULL, NULL, "atom", BT_INTEGER, di, REQUIRED, INTENT_OUT, "value", BT_INTEGER, di, REQUIRED, INTENT_IN, @@ -3360,7 +3360,7 @@ add_subroutines (void) stat, BT_INTEGER, di, OPTIONAL, INTENT_OUT); add_sym_3s ("atomic_and", GFC_ISYM_ATOMIC_AND, CLASS_ATOMIC, - BT_UNKNOWN, 0, GFC_STD_F2008_TS, + BT_UNKNOWN, 0, GFC_STD_F2018, gfc_check_atomic_op, NULL, NULL, "atom", BT_INTEGER, di, REQUIRED, INTENT_OUT, "value", BT_INTEGER, di, REQUIRED, INTENT_IN, @@ -3367,7 +3367,7 @@ add_subroutines (void) stat, BT_INTEGER, di, OPTIONAL, INTENT_OUT); add_sym_3s ("atomic_or", GFC_ISYM_ATOMIC_OR, CLASS_ATOMIC, - BT_UNKNOWN, 0, GFC_STD_F2008_TS, + BT_UNKNOWN, 0, GFC_STD_F2018, gfc_check_atomic_op, NULL, NULL, "atom", BT_INTEGER, di, REQUIRED, INTENT_OUT, "value", BT_INTEGER, di, REQUIRED, INTENT_IN, @@ -3374,7 +3374,7 @@ add_subroutines (void) stat, BT_INTEGER, di, OPTIONAL, INTENT_OUT); add_sym_3s ("atomic_xor", GFC_ISYM_ATOMIC_XOR, CLASS_ATOMIC, - BT_UNKNOWN, 0, GFC_STD_F2008_TS, + BT_UNKNOWN, 0, GFC_STD_F2018, gfc_check_atomic_op, NULL, NULL, "atom", BT_INTEGER, di, REQUIRED, INTENT_OUT, "value", BT_INTEGER, di, REQUIRED, INTENT_IN, @@ -3381,7 +3381,7 @@ add_subroutines (void) stat, BT_INTEGER, di, OPTIONAL, INTENT_OUT); add_sym_4s ("atomic_fetch_add", GFC_ISYM_ATOMIC_FETCH_ADD, CLASS_ATOMIC, - BT_UNKNOWN, 0, GFC_STD_F2008_TS, + BT_UNKNOWN, 0, GFC_STD_F2018, gfc_check_atomic_fetch_op, NULL, NULL, "atom", BT_INTEGER, di, REQUIRED, INTENT_OUT, "value", BT_INTEGER, di, REQUIRED, INTENT_IN, @@ -3389,7 +3389,7 @@ add_subroutines (void) stat, BT_INTEGER, di, OPTIONAL, INTENT_OUT); add_sym_4s ("atomic_fetch_and", GFC_ISYM_ATOMIC_FETCH_AND, CLASS_ATOMIC, - BT_UNKNOWN, 0, GFC_STD_F2008_TS, + BT_UNKNOWN, 0, GFC_STD_F2018, gfc_check_atomic_fetch_op, NULL, NULL, "atom", BT_INTEGER, di, REQUIRED, INTENT_OUT, "value", BT_INTEGER, di, REQUIRED, INTENT_IN, @@ -3397,7 +3397,7 @@ add_subroutines (void) stat, BT_INTEGER, di, OPTIONAL, INTENT_OUT); add_sym_4s ("atomic_fetch_or", GFC_ISYM_ATOMIC_FETCH_OR, CLASS_ATOMIC, - BT_UNKNOWN, 0, GFC_STD_F2008_TS, + BT_UNKNOWN, 0, GFC_STD_F2018, gfc_check_atomic_fetch_op, NULL, NULL, "atom", BT_INTEGER, di, REQUIRED, INTENT_OUT, "value", BT_INTEGER, di, REQUIRED, INTENT_IN, @@ -3405,7 +3405,7 @@ add_subroutines (void) stat, BT_INTEGER, di, OPTIONAL, INTENT_OUT); add_sym_4s ("atomic_fetch_xor", GFC_ISYM_ATOMIC_FETCH_XOR, CLASS_ATOMIC, - BT_UNKNOWN, 0, GFC_STD_F2008_TS, + BT_UNKNOWN, 0, GFC_STD_F2018, gfc_check_atomic_fetch_op, NULL, NULL, "atom", BT_INTEGER, di, REQUIRED, INTENT_OUT, "value", BT_INTEGER, di, REQUIRED, INTENT_IN, @@ -3419,7 +3419,7 @@ add_subroutines (void) tm, BT_REAL, dr, REQUIRED, INTENT_OUT); add_sym_3s ("event_query", GFC_ISYM_EVENT_QUERY, CLASS_ATOMIC, - BT_UNKNOWN, 0, GFC_STD_F2008_TS, + BT_UNKNOWN, 0, GFC_STD_F2018, gfc_check_event_query, NULL, gfc_resolve_event_query, "event", BT_INTEGER, di, REQUIRED, INTENT_IN, c, BT_INTEGER, di, OPTIONAL, INTENT_IN, @@ -3609,7 +3609,7 @@ add_subroutines (void) /* Coarray collectives. */ add_sym_4s ("co_broadcast", GFC_ISYM_CO_BROADCAST, CLASS_IMPURE, - BT_UNKNOWN, 0, GFC_STD_F2008_TS, + BT_UNKNOWN, 0, GFC_STD_F2018, gfc_check_co_broadcast, NULL, NULL, a, BT_REAL, dr, REQUIRED, INTENT_INOUT, "source_image", BT_INTEGER, di, REQUIRED, INTENT_IN, @@ -3617,7 +3617,7 @@ add_subroutines (void) errmsg, BT_CHARACTER, dc, OPTIONAL, INTENT_OUT); add_sym_4s ("co_max", GFC_ISYM_CO_MAX, CLASS_IMPURE, - BT_UNKNOWN, 0, GFC_STD_F2008_TS, + BT_UNKNOWN, 0, GFC_STD_F2018, gfc_check_co_minmax, NULL, NULL, a, BT_REAL, dr, REQUIRED, INTENT_INOUT, result_image, BT_INTEGER, di, OPTIONAL, INTENT_IN, @@ -3625,7 +3625,7 @@ add_subroutines (void) 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, + BT_UNKNOWN, 0, GFC_STD_F2018, gfc_check_co_minmax, NULL, NULL, a, BT_REAL, dr, REQUIRED, INTENT_INOUT, result_image, BT_INTEGER, di, OPTIONAL, INTENT_IN, @@ -3633,7 +3633,7 @@ add_subroutines (void) 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, + BT_UNKNOWN, 0, GFC_STD_F2018, gfc_check_co_sum, NULL, NULL, a, BT_REAL, dr, REQUIRED, INTENT_INOUT, result_image, BT_INTEGER, di, OPTIONAL, INTENT_IN, @@ -3641,7 +3641,7 @@ add_subroutines (void) errmsg, BT_CHARACTER, dc, OPTIONAL, INTENT_OUT); add_sym_5s ("co_reduce", GFC_ISYM_CO_REDUCE, CLASS_IMPURE, - BT_UNKNOWN, 0, GFC_STD_F2008_TS, + BT_UNKNOWN, 0, GFC_STD_F2018, gfc_check_co_reduce, NULL, NULL, a, BT_REAL, dr, REQUIRED, INTENT_INOUT, "operator", BT_INTEGER, di, REQUIRED, INTENT_IN, @@ -4618,8 +4618,8 @@ gfc_check_intrinsic_standard (const gfc_intrinsic_ symstd_msg = "new in Fortran 2008"; break; - case GFC_STD_F2008_TS: - symstd_msg = "new in TS 29113/TS 18508"; + case GFC_STD_F2018: + symstd_msg = "new in Fortran 2018"; break; case GFC_STD_GNU: Index: gcc/fortran/invoke.texi =================================================================== --- gcc/fortran/invoke.texi (revision 260433) +++ gcc/fortran/invoke.texi (working copy) @@ -481,10 +481,9 @@ conformance to the Fortran 95, Fortran 2003, Fortr 2018 standards, respectively; errors are given for all extensions beyond the relevant language standard, and warnings are given for the Fortran 77 features that are permitted but obsolescent in later -standards. @samp{-std=f2008ts} allows the Fortran 2008 standard -including the additions of the Technical Specification (TS) 29113 on -Further Interoperability of Fortran with C and TS 18508 on Additional -Parallel Features in Fortran. +standards. The deprecated option @samp{-std=f2008ts} acts as an alias for +@samp{-std=f2018}. It is only present for backwards compatibility with +earlier gfortran versions and should not be used any more. @item -ftest-forall-temp @opindex @code{ftest-forall-temp} @@ -994,7 +993,7 @@ of the Fortran Character Set. For continuation li by a digit between 1 and 9 is supported. @option{-Wtabs} will cause a warning to be issued if a tab is encountered. Note, @option{-Wtabs} is active for @option{-pedantic}, @option{-std=f95}, @option{-std=f2003}, -@option{-std=f2008}, @option{-std=f2008ts}, @option{-std=f2018} and +@option{-std=f2008}, @option{-std=f2018} and @option{-Wall}. @item -Wundefined-do-loop Index: gcc/fortran/iso-c-binding.def =================================================================== --- gcc/fortran/iso-c-binding.def (revision 260433) +++ gcc/fortran/iso-c-binding.def (working copy) @@ -66,7 +66,7 @@ NAMED_INTCST (ISOCBINDING_INTMAX_T, "c_intmax_t", NAMED_INTCST (ISOCBINDING_INTPTR_T, "c_intptr_t", \ get_int_kind_from_name (INTPTR_TYPE), GFC_STD_F2003) NAMED_INTCST (ISOCBINDING_PTRDIFF_T, "c_ptrdiff_t", \ - get_int_kind_from_name (PTRDIFF_TYPE), GFC_STD_F2008_TS) + get_int_kind_from_name (PTRDIFF_TYPE), GFC_STD_F2018) NAMED_INTCST (ISOCBINDING_SIZE_T, "c_size_t", \ gfc_index_integer_kind, GFC_STD_F2003) NAMED_INTCST (ISOCBINDING_SIGNED_CHAR, "c_signed_char", \ Index: gcc/fortran/iso-fortran-env.def =================================================================== --- gcc/fortran/iso-fortran-env.def (revision 260433) +++ gcc/fortran/iso-fortran-env.def (working copy) @@ -86,7 +86,7 @@ NAMED_INTCST (ISOFORTRANENV_FILE_STAT_LOCKED_OTHER NAMED_INTCST (ISOFORTRANENV_FILE_STAT_STOPPED_IMAGE, "stat_stopped_image", \ GFC_STAT_STOPPED_IMAGE, GFC_STD_F2008) NAMED_INTCST (ISOFORTRANENV_FILE_STAT_FAILED_IMAGE, "stat_failed_image", \ - GFC_STAT_FAILED_IMAGE, GFC_STD_F2008_TS) + GFC_STAT_FAILED_IMAGE, GFC_STD_F2018) NAMED_INTCST (ISOFORTRANENV_FILE_STAT_UNLOCKED, "stat_unlocked", \ GFC_STAT_UNLOCKED, GFC_STD_F2008) @@ -126,12 +126,12 @@ NAMED_DERIVED_TYPE (ISOFORTRAN_LOCK_TYPE, "lock_ty NAMED_DERIVED_TYPE (ISOFORTRAN_EVENT_TYPE, "event_type", \ flag_coarray == GFC_FCOARRAY_LIB ? get_int_kind_from_node (ptr_type_node) - : gfc_default_integer_kind, GFC_STD_F2008_TS) + : gfc_default_integer_kind, GFC_STD_F2018) NAMED_DERIVED_TYPE (ISOFORTRAN_TEAM_TYPE, "team_type", \ flag_coarray == GFC_FCOARRAY_LIB ? get_int_kind_from_node (ptr_type_node) - : gfc_default_integer_kind, GFC_STD_F2008_TS) + : gfc_default_integer_kind, GFC_STD_F2018) #undef NAMED_INTCST #undef NAMED_KINDARRAY Index: gcc/fortran/libgfortran.h =================================================================== --- gcc/fortran/libgfortran.h (revision 260433) +++ gcc/fortran/libgfortran.h (working copy) @@ -22,10 +22,9 @@ along with GCC; see the file COPYING3. If not see Note that no features were obsoleted nor deleted in F2003. Please remember to keep those definitions in sync with gfortran.texi. */ -#define GFC_STD_F2018_DEL (1<<12) /* Deleted in F2018. */ -#define GFC_STD_F2018_OBS (1<<11) /* Obsolescent in F2018. */ -#define GFC_STD_F2018 (1<<10) /* New in F2018. */ -#define GFC_STD_F2008_TS (1<<9) /* POST-F2008 technical reports. */ +#define GFC_STD_F2018_DEL (1<<11) /* Deleted in F2018. */ +#define GFC_STD_F2018_OBS (1<<10) /* Obsolescent in F2018. */ +#define GFC_STD_F2018 (1<<9) /* New in F2018. */ #define GFC_STD_F2008_OBS (1<<8) /* Obsolescent in F2008. */ #define GFC_STD_F2008 (1<<7) /* New in F2008. */ #define GFC_STD_LEGACY (1<<6) /* Backward compatibility. */ @@ -44,8 +43,7 @@ along with GCC; see the file COPYING3. If not see | GFC_STD_F2018_DEL) #define GFC_STD_OPT_F03 (GFC_STD_OPT_F95 | GFC_STD_F2003) #define GFC_STD_OPT_F08 (GFC_STD_OPT_F03 | GFC_STD_F2008) -#define GFC_STD_OPT_F08TS (GFC_STD_OPT_F08 | GFC_STD_F2008_TS) -#define GFC_STD_OPT_F18 ((GFC_STD_OPT_F08TS | GFC_STD_F2018) \ +#define GFC_STD_OPT_F18 ((GFC_STD_OPT_F08 | GFC_STD_F2018) \ & (~GFC_STD_F2018_DEL)) /* Bitmasks for the various FPE that can be enabled. These need to be straight integers Index: gcc/fortran/match.c =================================================================== --- gcc/fortran/match.c (revision 260433) +++ gcc/fortran/match.c (working copy) @@ -3322,7 +3322,7 @@ cleanup: match gfc_match_event_post (void) { - if (!gfc_notify_std (GFC_STD_F2008_TS, "EVENT POST statement at %C")) + if (!gfc_notify_std (GFC_STD_F2018, "EVENT POST statement at %C")) return MATCH_ERROR; return event_statement (ST_EVENT_POST); @@ -3332,7 +3332,7 @@ gfc_match_event_post (void) match gfc_match_event_wait (void) { - if (!gfc_notify_std (GFC_STD_F2008_TS, "EVENT WAIT statement at %C")) + if (!gfc_notify_std (GFC_STD_F2018, "EVENT WAIT statement at %C")) return MATCH_ERROR; return event_statement (ST_EVENT_WAIT); @@ -3344,7 +3344,7 @@ gfc_match_event_wait (void) match gfc_match_fail_image (void) { - if (!gfc_notify_std (GFC_STD_F2008_TS, "FAIL IMAGE statement at %C")) + if (!gfc_notify_std (GFC_STD_F2018, "FAIL IMAGE statement at %C")) return MATCH_ERROR; if (gfc_match_char ('(') == MATCH_YES) @@ -3368,7 +3368,7 @@ gfc_match_form_team (void) match m; gfc_expr *teamid,*team; - if (!gfc_notify_std (GFC_STD_F2008_TS, "FORM TEAM statement at %C")) + if (!gfc_notify_std (GFC_STD_F2018, "FORM TEAM statement at %C")) return MATCH_ERROR; if (gfc_match_char ('(') == MATCH_NO) @@ -3407,7 +3407,7 @@ gfc_match_change_team (void) match m; gfc_expr *team; - if (!gfc_notify_std (GFC_STD_F2008_TS, "CHANGE TEAM statement at %C")) + if (!gfc_notify_std (GFC_STD_F2018, "CHANGE TEAM statement at %C")) return MATCH_ERROR; if (gfc_match_char ('(') == MATCH_NO) @@ -3437,7 +3437,7 @@ syntax: match gfc_match_end_team (void) { - if (!gfc_notify_std (GFC_STD_F2008_TS, "END TEAM statement at %C")) + if (!gfc_notify_std (GFC_STD_F2018, "END TEAM statement at %C")) return MATCH_ERROR; if (gfc_match_char ('(') == MATCH_YES) @@ -3461,7 +3461,7 @@ gfc_match_sync_team (void) match m; gfc_expr *team; - if (!gfc_notify_std (GFC_STD_F2008_TS, "SYNC TEAM statement at %C")) + if (!gfc_notify_std (GFC_STD_F2018, "SYNC TEAM statement at %C")) return MATCH_ERROR; if (gfc_match_char ('(') == MATCH_NO) Index: gcc/fortran/options.c =================================================================== --- gcc/fortran/options.c (revision 260433) +++ gcc/fortran/options.c (working copy) @@ -42,7 +42,7 @@ set_default_std_flags (void) { gfc_option.allow_std = GFC_STD_F95_OBS | GFC_STD_F95_DEL | GFC_STD_F2003 | GFC_STD_F2008 | GFC_STD_F95 | GFC_STD_F77 - | GFC_STD_F2008_OBS | GFC_STD_F2008_TS | GFC_STD_GNU | GFC_STD_LEGACY + | GFC_STD_F2008_OBS | GFC_STD_GNU | GFC_STD_LEGACY | GFC_STD_F2018 | GFC_STD_F2018_DEL | GFC_STD_F2018_OBS; gfc_option.warn_std = GFC_STD_F2018_DEL | GFC_STD_F95_DEL | GFC_STD_LEGACY; } @@ -731,13 +731,6 @@ gfc_handle_option (size_t scode, const char *arg, break; case OPT_std_f2008ts: - gfc_option.allow_std = GFC_STD_OPT_F08TS; - gfc_option.warn_std = GFC_STD_F95_OBS | GFC_STD_F2008_OBS; - gfc_option.max_identifier_length = 63; - warn_ampersand = 1; - warn_tabs = 1; - break; - case OPT_std_f2018: gfc_option.allow_std = GFC_STD_OPT_F18; gfc_option.warn_std = GFC_STD_F95_OBS | GFC_STD_F2008_OBS Index: gcc/testsuite/gfortran.dg/assumed_rank_5.f90 =================================================================== --- gcc/testsuite/gfortran.dg/assumed_rank_5.f90 (revision 260433) +++ gcc/testsuite/gfortran.dg/assumed_rank_5.f90 (working copy) @@ -5,5 +5,5 @@ ! ! subroutine foo(x) - integer :: x(..) ! { dg-error "TS 29113/TS 18508: Assumed-rank array" } + integer :: x(..) ! { dg-error "Fortran 2018: Assumed-rank array" } end subroutine foo Index: gcc/testsuite/gfortran.dg/assumed_type_4.f90 =================================================================== --- gcc/testsuite/gfortran.dg/assumed_type_4.f90 (revision 260433) +++ gcc/testsuite/gfortran.dg/assumed_type_4.f90 (working copy) @@ -6,5 +6,5 @@ ! Test TYPE(*) subroutine one(a) - type(*) :: a ! { dg-error "TS 29113/TS 18508: Assumed type" } + type(*) :: a ! { dg-error "Fortran 2018: Assumed type" } end subroutine one Index: gcc/testsuite/gfortran.dg/bind_c_array_params.f03 =================================================================== --- gcc/testsuite/gfortran.dg/bind_c_array_params.f03 (revision 260433) +++ gcc/testsuite/gfortran.dg/bind_c_array_params.f03 (working copy) @@ -5,11 +5,11 @@ use, intrinsic :: iso_c_binding implicit none contains - subroutine sub0(assumed_array) bind(c) ! { dg-error "TS 29113/TS 18508: Assumed-shape array 'assumed_array' at .1. as dummy argument to the BIND.C. procedure 'sub0'" } + subroutine sub0(assumed_array) bind(c) ! { dg-error "Fortran 2018: Assumed-shape array 'assumed_array' at .1. as dummy argument to the BIND.C. procedure 'sub0'" } integer(c_int), dimension(:) :: assumed_array end subroutine sub0 - subroutine sub1(deferred_array) bind(c) ! { dg-error "TS 29113/TS 18508: Variable 'deferred_array' at .1. with POINTER attribute in procedure 'sub1' with BIND.C." } + subroutine sub1(deferred_array) bind(c) ! { dg-error "Fortran 2018: Variable 'deferred_array' at .1. with POINTER attribute in procedure 'sub1' with BIND.C." } integer(c_int), pointer :: deferred_array(:) end subroutine sub1 end module bind_c_array_params Index: gcc/testsuite/gfortran.dg/bind_c_usage_28.f90 =================================================================== --- gcc/testsuite/gfortran.dg/bind_c_usage_28.f90 (revision 260433) +++ gcc/testsuite/gfortran.dg/bind_c_usage_28.f90 (working copy) @@ -8,11 +8,11 @@ type, bind(C) :: cstruct integer :: i end type interface - subroutine psub(this) bind(c, name='Psub') ! { dg-error "TS 29113/TS 18508: Variable 'this' at .1. with POINTER attribute in procedure 'psub' with BIND.C." } + subroutine psub(this) bind(c, name='Psub') ! { dg-error "Fortran 2018: Variable 'this' at .1. with POINTER attribute in procedure 'psub' with BIND.C." } import :: c_float, cstruct real(c_float), pointer :: this(:) end subroutine psub - subroutine psub2(that) bind(c, name='Psub2') ! { dg-error "TS 29113/TS 18508: Variable 'that' at .1. with ALLOCATABLE attribute in procedure 'psub2' with BIND.C." } + subroutine psub2(that) bind(c, name='Psub2') ! { dg-error "Fortran 2018: Variable 'that' at .1. with ALLOCATABLE attribute in procedure 'psub2' with BIND.C." } import :: c_float, cstruct type(cstruct), allocatable :: that(:) end subroutine psub2 Index: gcc/testsuite/gfortran.dg/c_funloc_tests_5.f03 =================================================================== --- gcc/testsuite/gfortran.dg/c_funloc_tests_5.f03 (revision 260433) +++ gcc/testsuite/gfortran.dg/c_funloc_tests_5.f03 (working copy) @@ -8,9 +8,9 @@ contains subroutine sub0() bind(c) type(c_funptr) :: my_c_funptr - my_c_funptr = c_funloc(sub1) ! { dg-error "TS 29113/TS 18508: Noninteroperable procedure at .1. to C_FUNLOC" } + my_c_funptr = c_funloc(sub1) ! { dg-error "Fortran 2018: Noninteroperable procedure at .1. to C_FUNLOC" } - my_c_funptr = c_funloc(func0) ! { dg-error "TS 29113/TS 18508: Noninteroperable procedure at .1. to C_FUNLOC" } + my_c_funptr = c_funloc(func0) ! { dg-error "Fortran 2018: Noninteroperable procedure at .1. to C_FUNLOC" } end subroutine sub0 subroutine sub1() Index: gcc/testsuite/gfortran.dg/c_funloc_tests_6.f90 =================================================================== --- gcc/testsuite/gfortran.dg/c_funloc_tests_6.f90 (revision 260433) +++ gcc/testsuite/gfortran.dg/c_funloc_tests_6.f90 (working copy) @@ -26,6 +26,6 @@ cfp = c_loc (int) ! { dg-error "Can't convert TY call c_f_pointer (cfp, int) ! { dg-error "Argument CPTR at .1. to C_F_POINTER shall have the type TYPE.C_PTR." } call c_f_procpointer (cp, fsub) ! { dg-error "Argument CPTR at .1. to C_F_PROCPOINTER shall have the type TYPE.C_FUNPTR." } -cfp = c_funloc (noCsub) ! { dg-error "TS 29113/TS 18508: Noninteroperable procedure at .1. to C_FUNLOC" } -call c_f_procpointer (cfp, fint) ! { dg-error "TS 29113/TS 18508: Noninteroperable procedure pointer at .1. to C_F_PROCPOINTER" } +cfp = c_funloc (noCsub) ! { dg-error "Fortran 2018: Noninteroperable procedure at .1. to C_FUNLOC" } +call c_f_procpointer (cfp, fint) ! { dg-error "Fortran 2018: Noninteroperable procedure pointer at .1. to C_F_PROCPOINTER" } end Index: gcc/testsuite/gfortran.dg/c_loc_tests_11.f03 =================================================================== --- gcc/testsuite/gfortran.dg/c_loc_tests_11.f03 (revision 260433) +++ gcc/testsuite/gfortran.dg/c_loc_tests_11.f03 (working copy) @@ -43,7 +43,7 @@ contains integer(c_int), intent(in) :: handle get_foo_address = c_loc(foo_pool(handle)%v) - get_foo_address = c_loc(foo_pool2(handle)%v) ! { dg-error "TS 29113/TS 18508: Noninteroperable array at .1. as argument to C_LOC: Expression is a noninteroperable derived type" } + get_foo_address = c_loc(foo_pool2(handle)%v) ! { dg-error "Fortran 2018: Noninteroperable array at .1. as argument to C_LOC: Expression is a noninteroperable derived type" } end function get_foo_address Index: gcc/testsuite/gfortran.dg/coarray_atomic_2.f90 =================================================================== --- gcc/testsuite/gfortran.dg/coarray_atomic_2.f90 (revision 260433) +++ gcc/testsuite/gfortran.dg/coarray_atomic_2.f90 (working copy) @@ -6,15 +6,15 @@ implicit none intrinsic :: atomic_define intrinsic :: atomic_ref -intrinsic :: atomic_cas ! { dg-error "not available in the current standard settings but new in TS 29113/TS 18508." } -intrinsic :: atomic_add ! { dg-error "not available in the current standard settings but new in TS 29113/TS 18508." } -intrinsic :: atomic_and ! { dg-error "not available in the current standard settings but new in TS 29113/TS 18508." } -intrinsic :: atomic_or ! { dg-error "not available in the current standard settings but new in TS 29113/TS 18508." } -intrinsic :: atomic_xor ! { dg-error "not available in the current standard settings but new in TS 29113/TS 18508." } -intrinsic :: atomic_fetch_add ! { dg-error "not available in the current standard settings but new in TS 29113/TS 18508." } -intrinsic :: atomic_fetch_and ! { dg-error "not available in the current standard settings but new in TS 29113/TS 18508." } -intrinsic :: atomic_fetch_or ! { dg-error "not available in the current standard settings but new in TS 29113/TS 18508." } -intrinsic :: atomic_fetch_xor ! { dg-error "not available in the current standard settings but new in TS 29113/TS 18508." } +intrinsic :: atomic_cas ! { dg-error "not available in the current standard settings but new in Fortran 2018." } +intrinsic :: atomic_add ! { dg-error "not available in the current standard settings but new in Fortran 2018." } +intrinsic :: atomic_and ! { dg-error "not available in the current standard settings but new in Fortran 2018." } +intrinsic :: atomic_or ! { dg-error "not available in the current standard settings but new in Fortran 2018." } +intrinsic :: atomic_xor ! { dg-error "not available in the current standard settings but new in Fortran 2018." } +intrinsic :: atomic_fetch_add ! { dg-error "not available in the current standard settings but new in Fortran 2018." } +intrinsic :: atomic_fetch_and ! { dg-error "not available in the current standard settings but new in Fortran 2018." } +intrinsic :: atomic_fetch_or ! { dg-error "not available in the current standard settings but new in Fortran 2018." } +intrinsic :: atomic_fetch_xor ! { dg-error "not available in the current standard settings but new in Fortran 2018." } integer(atomic_int_kind) :: caf[*], var logical(atomic_logical_kind) :: caf_log[*], var2 integer :: stat Index: gcc/testsuite/gfortran.dg/coarray_collectives_10.f90 =================================================================== --- gcc/testsuite/gfortran.dg/coarray_collectives_10.f90 (revision 260433) +++ gcc/testsuite/gfortran.dg/coarray_collectives_10.f90 (working copy) @@ -6,6 +6,6 @@ ! program test implicit none - intrinsic co_reduce ! { dg-error "is not available in the current standard settings but new in TS 29113/TS 18508." } - intrinsic co_broadcast ! { dg-error "is not available in the current standard settings but new in TS 29113/TS 18508." } + intrinsic co_reduce ! { dg-error "is not available in the current standard settings but new in Fortran 2018." } + intrinsic co_broadcast ! { dg-error "is not available in the current standard settings but new in Fortran 2018." } end program test Index: gcc/testsuite/gfortran.dg/coarray_collectives_13.f90 =================================================================== --- gcc/testsuite/gfortran.dg/coarray_collectives_13.f90 (revision 260433) +++ gcc/testsuite/gfortran.dg/coarray_collectives_13.f90 (working copy) @@ -6,6 +6,6 @@ ! program test implicit none - intrinsic co_reduce ! { dg-error "is not available in the current standard settings but new in TS 29113/TS 18508." } - intrinsic co_broadcast ! { dg-error "is not available in the current standard settings but new in TS 29113/TS 18508." } + intrinsic co_reduce ! { dg-error "is not available in the current standard settings but new in Fortran 2018." } + intrinsic co_broadcast ! { dg-error "is not available in the current standard settings but new in Fortran 2018." } end program test Index: gcc/testsuite/gfortran.dg/coarray_collectives_2.f90 =================================================================== --- gcc/testsuite/gfortran.dg/coarray_collectives_2.f90 (revision 260433) +++ gcc/testsuite/gfortran.dg/coarray_collectives_2.f90 (working copy) @@ -6,7 +6,7 @@ ! program test implicit none - intrinsic co_max ! { dg-error "is not available in the current standard settings but new in TS 29113/TS 18508." } - intrinsic co_min ! { dg-error "is not available in the current standard settings but new in TS 29113/TS 18508." } - intrinsic co_sum ! { dg-error "is not available in the current standard settings but new in TS 29113/TS 18508." } + intrinsic co_max ! { dg-error "is not available in the current standard settings but new in Fortran 2018." } + intrinsic co_min ! { dg-error "is not available in the current standard settings but new in Fortran 2018." } + intrinsic co_sum ! { dg-error "is not available in the current standard settings but new in Fortran 2018." } end program test Index: gcc/testsuite/gfortran.dg/error_stop_4.f90 =================================================================== --- gcc/testsuite/gfortran.dg/error_stop_4.f90 (revision 260433) +++ gcc/testsuite/gfortran.dg/error_stop_4.f90 (working copy) @@ -1,5 +1,5 @@ ! { dg-do compile } -! { dg-options "-std=f2008ts" } +! { dg-options "-std=f2008" } ! ! F2018 permits ERROR STOP in PURE procedures ! Index: gcc/testsuite/gfortran.dg/implicit_14.f90 =================================================================== --- gcc/testsuite/gfortran.dg/implicit_14.f90 (revision 260433) +++ gcc/testsuite/gfortran.dg/implicit_14.f90 (working copy) @@ -1,5 +1,5 @@ ! { dg-do compile } -! { dg-options "-std=f2008ts" } +! { dg-options "-std=f2008" } ! ! Support Fortran 2018's IMPLICIT NONE with spec list ! (currently implemented as vendor extension) Index: gcc/testsuite/gfortran.dg/rank_3.f90 =================================================================== --- gcc/testsuite/gfortran.dg/rank_3.f90 (revision 260433) +++ gcc/testsuite/gfortran.dg/rank_3.f90 (working copy) @@ -3,5 +3,5 @@ ! ! PR fortran/48820 ! -intrinsic :: rank ! { dg-error "new in TS 29113" } +intrinsic :: rank ! { dg-error "new in Fortran 2018" } end