summaryrefslogtreecommitdiff
path: root/gcc/fortran
diff options
context:
space:
mode:
authorSteven G. Kargl <kargls@comcast.net>2006-08-06 01:38:46 +0000
committerSteven G. Kargl <kargl@gcc.gnu.org>2006-08-06 01:38:46 +0000
commit994c1cc04dda157794990bbe71412678e3d7fad8 (patch)
tree011f1ce49320db5a0f8f0dc167021ebd417acd6e /gcc/fortran
parent676d444a0290b94f490c1206d6faa3715c2a8f6b (diff)
downloadgcc-994c1cc04dda157794990bbe71412678e3d7fad8.tar.gz
re PR fortran/28548 ([4.1 only] Optional argument failed)
2006-08-05 Steven G. Kargl <kargls@comcast.nt> PR fortran/28548 * gfortran.dg/elemental_optional_args_1.f90: dg-error becomes dg-warning. Add -pedantic option. * resolve.c(resolve_elemental_actual): Add flags.h to use -pedantic and exclude conversion functions in conditional. Change gfc_error to gfc_warning. (warn_unused_label) Rename to ... (warn_unused_fortran_label) avoid warn_unused_label in flags.h. From-SVN: r115963
Diffstat (limited to 'gcc/fortran')
-rw-r--r--gcc/fortran/ChangeLog9
-rw-r--r--gcc/fortran/resolve.c24
2 files changed, 22 insertions, 11 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index bb84735d21a..7be47e2ea69 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,12 @@
+2006-08-05 Steven G. Kargl <kargls@comcast.nt>
+
+ PR fortran/28548
+ * resolve.c(resolve_elemental_actual): Add flags.h to use -pedantic
+ and exclude conversion functions in conditional. Change gfc_error
+ to gfc_warning.
+ (warn_unused_label) Rename to ...
+ (warn_unused_fortran_label) avoid warn_unused_label in flags.h.
+
2006-07-30 Francois-Xavier Coudert <coudert@clipper.ens.fr>
* intrinsic.c (add_functions): Add ACCESS, CHMOD, RSHIFT, LSHIFT.
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index aee04eccd6c..c327a82c9d0 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -23,6 +23,7 @@ Software Foundation, 51 Franklin Street, Fifth Floor,Boston, MA
#include "config.h"
#include "system.h"
+#include "flags.h"
#include "gfortran.h"
#include "arith.h" /* For gfc_compare_expr(). */
#include "dependency.h"
@@ -1007,18 +1008,19 @@ resolve_elemental_actual (gfc_expr *expr, gfc_code *c)
else if (isym)
formal_optional = true;
- if (arg->expr != NULL
+ if (pedantic && arg->expr != NULL
&& arg->expr->expr_type == EXPR_VARIABLE
&& arg->expr->symtree->n.sym->attr.optional
&& formal_optional
&& arg->expr->rank
- && (set_by_optional || arg->expr->rank != rank))
+ && (set_by_optional || arg->expr->rank != rank)
+ && !(isym && isym->generic_id == GFC_ISYM_CONVERSION))
{
- gfc_error ("'%s' at %L is an array and OPTIONAL; it cannot "
- "therefore be an actual argument of an ELEMENTAL "
- "procedure unless there is a non-optional argument "
- "with the same rank (12.4.1.5)",
- arg->expr->symtree->n.sym->name, &arg->expr->where);
+ gfc_warning ("'%s' at %L is an array and OPTIONAL; IF IT IS "
+ "MISSING, it cannot be the actual argument of an "
+ "ELEMENTAL procedure unless there is a non-optional"
+ "argument with the same rank (12.4.1.5)",
+ arg->expr->symtree->n.sym->name, &arg->expr->where);
return FAILURE;
}
}
@@ -6100,12 +6102,12 @@ gfc_elemental (gfc_symbol * sym)
/* Warn about unused labels. */
static void
-warn_unused_label (gfc_st_label * label)
+warn_unused_fortran_label (gfc_st_label * label)
{
if (label == NULL)
return;
- warn_unused_label (label->left);
+ warn_unused_fortran_label (label->left);
if (label->defined == ST_LABEL_UNKNOWN)
return;
@@ -6126,7 +6128,7 @@ warn_unused_label (gfc_st_label * label)
break;
}
- warn_unused_label (label->right);
+ warn_unused_fortran_label (label->right);
}
@@ -6649,7 +6651,7 @@ resolve_types (gfc_namespace * ns)
/* Warn about unused labels. */
if (gfc_option.warn_unused_labels)
- warn_unused_label (ns->st_labels);
+ warn_unused_fortran_label (ns->st_labels);
gfc_resolve_uops (ns->uop_root);