diff options
author | Giuliano Belinassi <giuliano.belinassi@usp.br> | 2020-08-22 17:43:43 -0300 |
---|---|---|
committer | Giuliano Belinassi <giuliano.belinassi@usp.br> | 2020-08-22 17:43:43 -0300 |
commit | a926878ddbd5a98b272c22171ce58663fc04c3e0 (patch) | |
tree | 86af256e5d9a9c06263c00adc90e5fe348008c43 /gcc/fortran/intrinsic.c | |
parent | 542730f087133690b47e036dfd43eb0db8a650ce (diff) | |
parent | 07cbaed8ba7d1b6e4ab3a9f44175502a4e1ecdb1 (diff) | |
download | gcc-devel/autopar_devel.zip gcc-devel/autopar_devel.tar.gz gcc-devel/autopar_devel.tar.bz2 |
Merge branch 'autopar_rebase2' into autopar_develdevel/autopar_devel
Quickly commit changes in the rebase branch.
Diffstat (limited to 'gcc/fortran/intrinsic.c')
-rw-r--r-- | gcc/fortran/intrinsic.c | 52 |
1 files changed, 33 insertions, 19 deletions
diff --git a/gcc/fortran/intrinsic.c b/gcc/fortran/intrinsic.c index 17f5efc..ef33587 100644 --- a/gcc/fortran/intrinsic.c +++ b/gcc/fortran/intrinsic.c @@ -2733,8 +2733,8 @@ add_functions (void) make_generic ("null", GFC_ISYM_NULL, GFC_STD_F95); - add_sym_2 ("num_images", GFC_ISYM_NUM_IMAGES, CLASS_INQUIRY, ACTUAL_NO, - BT_INTEGER, di, GFC_STD_F2008, + add_sym_2 ("num_images", GFC_ISYM_NUM_IMAGES, CLASS_TRANSFORMATIONAL, + ACTUAL_NO, BT_INTEGER, di, GFC_STD_F2008, gfc_check_num_images, gfc_simplify_num_images, NULL, dist, BT_INTEGER, di, OPTIONAL, failed, BT_LOGICAL, dl, OPTIONAL); @@ -3174,7 +3174,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_F2018, + ACTUAL_NO, BT_INTEGER, di, GFC_STD_F2018, gfc_check_team_number, NULL, gfc_resolve_team_number, team, BT_DERIVED, di, OPTIONAL); @@ -4442,6 +4442,18 @@ check_arglist (gfc_actual_arglist **ap, gfc_intrinsic_sym *sym, return false; } + /* F2018, p. 328: An argument to an intrinsic procedure other than + ASSOCIATED, NULL, or PRESENT shall be a data object. An EXPR_NULL + is not a data object. */ + if (actual->expr->expr_type == EXPR_NULL + && (!(sym->id == GFC_ISYM_ASSOCIATED + || sym->id == GFC_ISYM_NULL + || sym->id == GFC_ISYM_PRESENT))) + { + gfc_invalid_null_arg (actual->expr); + return false; + } + /* If the formal argument is INTENT([IN]OUT), check for definability. */ if (formal->intent == INTENT_INOUT || formal->intent == INTENT_OUT) { @@ -4763,8 +4775,8 @@ check_specific (gfc_intrinsic_sym *specific, gfc_expr *expr, int error_flag) for ( ; arg && arg->expr; arg = arg->next, n++) if (!gfc_check_conformance (first_expr, arg->expr, - "arguments '%s' and '%s' for " - "intrinsic '%s'", + _("arguments '%s' and '%s' for " + "intrinsic '%s'"), gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic)) @@ -4800,39 +4812,39 @@ gfc_check_intrinsic_standard (const gfc_intrinsic_sym* isym, switch (isym->standard) { case GFC_STD_F77: - symstd_msg = "available since Fortran 77"; + symstd_msg = _("available since Fortran 77"); break; case GFC_STD_F95_OBS: - symstd_msg = "obsolescent in Fortran 95"; + symstd_msg = _("obsolescent in Fortran 95"); break; case GFC_STD_F95_DEL: - symstd_msg = "deleted in Fortran 95"; + symstd_msg = _("deleted in Fortran 95"); break; case GFC_STD_F95: - symstd_msg = "new in Fortran 95"; + symstd_msg = _("new in Fortran 95"); break; case GFC_STD_F2003: - symstd_msg = "new in Fortran 2003"; + symstd_msg = _("new in Fortran 2003"); break; case GFC_STD_F2008: - symstd_msg = "new in Fortran 2008"; + symstd_msg = _("new in Fortran 2008"); break; case GFC_STD_F2018: - symstd_msg = "new in Fortran 2018"; + symstd_msg = _("new in Fortran 2018"); break; case GFC_STD_GNU: - symstd_msg = "a GNU Fortran extension"; + symstd_msg = _("a GNU Fortran extension"); break; case GFC_STD_LEGACY: - symstd_msg = "for backward compatibility"; + symstd_msg = _("for backward compatibility"); break; default: @@ -4845,8 +4857,8 @@ gfc_check_intrinsic_standard (const gfc_intrinsic_sym* isym, { /* Do only print a warning if not a GNU extension. */ if (!silent && isym->standard != GFC_STD_GNU) - gfc_warning (0, "Intrinsic %qs (is %s) is used at %L", - isym->name, _(symstd_msg), &where); + gfc_warning (0, "Intrinsic %qs (%s) used at %L", + isym->name, symstd_msg, &where); return true; } @@ -4857,7 +4869,7 @@ gfc_check_intrinsic_standard (const gfc_intrinsic_sym* isym, /* Otherwise, fail. */ if (symstd) - *symstd = _(symstd_msg); + *symstd = symstd_msg; return false; } @@ -5233,8 +5245,10 @@ gfc_convert_type_warn (gfc_expr *expr, gfc_typespec *ts, int eflag, int wflag, { /* Larger kinds can hold values of smaller kinds without problems. Hence, only warn if target kind is smaller than the source - kind - or if -Wconversion-extra is specified. */ - if (expr->expr_type != EXPR_CONSTANT) + kind - or if -Wconversion-extra is specified. LOGICAL values + will always fit regardless of kind so ignore conversion. */ + if (expr->expr_type != EXPR_CONSTANT + && ts->type != BT_LOGICAL) { if (warn_conversion && from_ts.kind > ts->kind) gfc_warning_now (OPT_Wconversion, "Possible change of value in " |