aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Thomas <pault@gcc.gnu.org>2007-04-07 20:20:49 +0000
committerPaul Thomas <pault@gcc.gnu.org>2007-04-07 20:20:49 +0000
commit909a3e38aa8c2ac203de767f3e4aa0f5c4457b9e (patch)
tree390ae9fd0c3cb23aef9e2c93b81cc77d712c715e
parentc60a84b86f0fbfe38aa93cdeffe563239095916f (diff)
downloadgcc-909a3e38aa8c2ac203de767f3e4aa0f5c4457b9e.zip
gcc-909a3e38aa8c2ac203de767f3e4aa0f5c4457b9e.tar.gz
gcc-909a3e38aa8c2ac203de767f3e4aa0f5c4457b9e.tar.bz2
re PR fortran/31222 (Rejected: implicitly-typed dummys used in initialization expressions)
2007-04-07 Paul Thomas <pault@gcc.gnu.org> PR fortran/31222 * check.c (numeric_check): If an expresson has not got a type, see if it is a symbol for which a default type applies. 2007-04-07 Paul Thomas <pault@gcc.gnu.org> PR fortran/31222 * gfortran.dg/default_numeric_type_1.f90: New test. From-SVN: r123643
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/check.c12
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/default_numeric_type_1.f9018
4 files changed, 41 insertions, 0 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 2079580..a9a8a07 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,5 +1,11 @@
2007-04-07 Paul Thomas <pault@gcc.gnu.org>
+ PR fortran/31222
+ * check.c (numeric_check): If an expresson has not got a type,
+ see if it is a symbol for which a default type applies.
+
+2007-04-07 Paul Thomas <pault@gcc.gnu.org>
+
PR fortran/31214
* trans-decl.c (gfc_get_symbol_decl): Allow unreferenced use
associated symbols.
diff --git a/gcc/fortran/check.c b/gcc/fortran/check.c
index 3b1a1a0..9806ebd 100644
--- a/gcc/fortran/check.c
+++ b/gcc/fortran/check.c
@@ -58,6 +58,18 @@ numeric_check (gfc_expr *e, int n)
if (gfc_numeric_ts (&e->ts))
return SUCCESS;
+ /* If the expression has not got a type, check if its namespace can
+ offer a default type. */
+ if ((e->expr_type == EXPR_VARIABLE || e->expr_type == EXPR_VARIABLE)
+ && e->symtree->n.sym->ts.type == BT_UNKNOWN
+ && gfc_set_default_type (e->symtree->n.sym, 0,
+ e->symtree->n.sym->ns) == SUCCESS
+ && gfc_numeric_ts (&e->symtree->n.sym->ts))
+ {
+ e->ts = e->symtree->n.sym->ts;
+ return SUCCESS;
+ }
+
gfc_error ("'%s' argument of '%s' intrinsic at %L must be a numeric type",
gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &e->where);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 8bb0934..df1d06a 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,10 @@
2007-04-07 Paul Thomas <pault@gcc.gnu.org>
+ PR fortran/31222
+ * gfortran.dg/default_numeric_type_1.f90: New test.
+
+2007-04-07 Paul Thomas <pault@gcc.gnu.org>
+
PR fortran/31424
* gfortran.dg/unreferenced_use_assoc_1.f90: New test.
diff --git a/gcc/testsuite/gfortran.dg/default_numeric_type_1.f90 b/gcc/testsuite/gfortran.dg/default_numeric_type_1.f90
new file mode 100644
index 0000000..e8f8d35
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/default_numeric_type_1.f90
@@ -0,0 +1,18 @@
+! { dg-do compile}
+! { dg-options "-fdump-tree-original" }
+! Tests the fix for PR 31222, in which the type of the arguments of abs
+! and int below were not detected to be of default numeric type..
+!
+! Contributed by Tobias Burnus <burnus@gcc.gnu.org>
+!
+subroutine mysub1(a,b,mode,dis)
+! integer :: mode
+! real :: dis
+ dimension a(abs(mode)),b(int(dis))
+ print *, mod
+ write (*,*) abs(mode), nint(dis)
+end subroutine
+
+program testprog
+ call mysub1((/1.,2./),(/1.,2.,3./),-2, 3.2)
+end