diff options
author | aldot <aldot@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-11-20 16:20:33 +0000 |
---|---|---|
committer | aldot <aldot@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-11-20 16:20:33 +0000 |
commit | 88eef51c4795352e157731459fcf2256d920b02e (patch) | |
tree | 1c22521a19dd87fd68039ebbda9a598ad162614e | |
parent | d027f7a9f16725245bfdc3d17c9890b6e0a88f30 (diff) | |
download | gcc-88eef51c4795352e157731459fcf2256d920b02e.tar.gz |
fortran/ChangeLog
2006-11-20 Bernhard Fischer <aldot@gcc.gnu.org>
PR fortran/24783
* resolve.c (resolve_variable): Get the implicit type from the
symbols namespace rather than the default namespace. Fix whitespace.
(resolve_formal_arglist, resolve_equivalence): Fix typo.
testsuite/ChangeLog
2006-11-20 Bernhard Fischer <aldot@gcc.gnu.org>
PR fortran/24783
* gfortran.dg/implicit_10.f90: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@119016 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/fortran/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/fortran/resolve.c | 8 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/implicit_10.f90 | 33 |
4 files changed, 48 insertions, 5 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 6efdfac0496..da741c6faff 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +2006-11-20 Bernhard Fischer <aldot@gcc.gnu.org> + + PR fortran/24783 + * resolve.c (resolve_variable): Get the implicit type from the + symbols namespace rather than the default namespace. Fix whitespace. + (resolve_formal_arglist, resolve_equivalence): Fix typo. + 2006-11-19 Erik Edelmann <eedelman@gcc.gnu.org> * resolve.c (resolve_ref): Check for ALLOCATABLEs to the right of diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 3d567cb7cad..5bd8296b55b 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -232,7 +232,7 @@ resolve_formal_arglist (gfc_symbol * proc) { gfc_error ("Character-valued argument '%s' of statement function at " - "%L must has constant length", + "%L must have constant length", sym->name, &sym->declared_at); continue; } @@ -2966,7 +2966,7 @@ resolve_variable (gfc_expr * e) else { /* Must be a simple variable reference. */ - if (gfc_set_default_type (sym, 1, NULL) == FAILURE) + if (gfc_set_default_type (sym, 1, sym->ns) == FAILURE) return FAILURE; e->ts = sym->ts; } @@ -6008,11 +6008,9 @@ resolve_symbol (gfc_symbol * sym) case FL_PARAMETER: if (resolve_fl_parameter (sym) == FAILURE) return; - break; default: - break; } @@ -6692,7 +6690,7 @@ resolve_equivalence (gfc_equiv *eq) { if (value_name != NULL) { - gfc_error ("Initialized objects '%s' and '%s' cannot both " + gfc_error ("Initialized objects '%s' and '%s' cannot both " "be in the EQUIVALENCE statement at %L", value_name, sym->name, &e->where); continue; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f014dbb6f04..bda06241fd7 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2006-11-20 Bernhard Fischer <aldot@gcc.gnu.org> + + PR fortran/24783 + * gfortran.dg/implicit_10.f90: New test. + 2006-11-19 Gabriel Dos Reis <gdr@integrable-solutions.net> PR c++/8586 diff --git a/gcc/testsuite/gfortran.dg/implicit_10.f90 b/gcc/testsuite/gfortran.dg/implicit_10.f90 new file mode 100644 index 00000000000..0f5094f4209 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/implicit_10.f90 @@ -0,0 +1,33 @@ +! { dg-do run } +! Check fix for PR24783 where we did try to resolve the implicit type +! from the wrong namespace thus rejecting valid code. + MODULE mod1 + IMPLICIT NONE + CONTAINS + SUBROUTINE sub(vec, ny) + IMPLICIT REAL (a-h,o-z) + IMPLICIT INTEGER (i-n) + DIMENSION vec(ny) + ny = fun(vec(ny),1,1) + RETURN + END SUBROUTINE sub + REAL FUNCTION fun(r1, i1, i2) + IMPLICIT REAL (r,f) + IMPLICIT INTEGER (i) + DIMENSION r1(i1:i2) + r1(i1) = i1 + 1 + r1(i2) = i2 + 1 + fun = r1(i1) + r1(i2) + END FUNCTION fun + END MODULE mod1 + + use mod1 + IMPLICIT REAL (d) + INTEGER i + dimension di(5) + i = 1 + if (fun(di(i),1,2).NE.5) call abort() + call sub(di(i),i) + if (i.NE.4) call abort() + end +! { dg-final { cleanup-modules "mod1" } } |