aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorTobias Burnus <burnus@net-b.de>2007-10-20 13:34:21 +0200
committerTobias Burnus <burnus@gcc.gnu.org>2007-10-20 13:34:21 +0200
commit70365b5c3d02f224299cd40fb48959eec8d9e020 (patch)
treea53652ecad7719cf18dc983406c631f7644b82b2 /gcc
parent85799c607bd51136e8d0eeefa7039ce82e10a900 (diff)
downloadgcc-70365b5c3d02f224299cd40fb48959eec8d9e020.zip
gcc-70365b5c3d02f224299cd40fb48959eec8d9e020.tar.gz
gcc-70365b5c3d02f224299cd40fb48959eec8d9e020.tar.bz2
re PR fortran/33818 (Bogus error "Variable 'str' is used at (1) before the ENTRY statement")
2007-10-20 Tobias Burnus <burnus@net-b.de> PR fortran/33818 * resolve.c (resolve_variable): Check that symbol is in the same namespace as the entry function. 2007-10-20 Tobias Burnus <burnus@net-b.de> PR fortran/33818 * gfortran.dg/entry_dummy_ref_3.f90: New. From-SVN: r129510
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/resolve.c6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/entry_dummy_ref_3.f9025
4 files changed, 39 insertions, 3 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 14e65ca..8616a59 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2007-10-20 Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/33818
+ * resolve.c (resolve_variable): Check that symbol is in the same
+ namespace as the entry function.
+
2007-10-20 Paul Thomas <pault@gcc.gnu.org>
FX Coudert <fxcoudert@gcc.gnu.org>
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index dffa76e..2ddc2b5 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -3935,7 +3935,7 @@ resolve_variable (gfc_expr *e)
bool seen;
/* If the symbol is a dummy... */
- if (sym->attr.dummy)
+ if (sym->attr.dummy && sym->ns == gfc_current_ns)
{
entry = gfc_current_ns->entries;
seen = false;
@@ -3952,8 +3952,8 @@ resolve_variable (gfc_expr *e)
if (!seen)
{
if (specification_expr)
- gfc_error ("Variable '%s',used in a specification expression, "
- "is referenced at %L before the ENTRY statement "
+ gfc_error ("Variable '%s', used in a specification expression"
+ ", is referenced at %L before the ENTRY statement "
"in which it is a parameter",
sym->name, &cs_base->current->loc);
else
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 65ec819..c10c500 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2007-10-20 Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/33818
+ * gfortran.dg/entry_dummy_ref_3.f90: New.
+
2007-10-20 Paul Thomas <pault@gcc.gnu.org>
FX Coudert <fxcoudert@gcc.gnu.org>
diff --git a/gcc/testsuite/gfortran.dg/entry_dummy_ref_3.f90 b/gcc/testsuite/gfortran.dg/entry_dummy_ref_3.f90
new file mode 100644
index 0000000..379f6fb
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/entry_dummy_ref_3.f90
@@ -0,0 +1,25 @@
+! { dg-do compile }
+!
+! PR fortran/33818
+!
+
+subroutine ExportZMX(lu)
+ implicit none
+ integer :: lu
+ interface
+ function LowerCase(str)
+ character(*),intent(in) :: str
+ character(len(str)) :: LowerCase
+ end function LowerCase
+ end interface
+ character(*),parameter :: UNAME(1:1)=(/'XXX'/)
+ write(lu,'(a)') 'UNIT '//UpperCase(UNAME(1))
+ write(lu,'(a)') 'Unit '//LowerCase(UNAME(1))
+entry ExportSEQ(lu)
+contains
+ function UpperCase(str) result(res)
+ character(*),intent(in) :: str
+ character(len(str)) res
+ res=str
+ end function
+end