diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index ba894d92ecf568609bb4f85df2ee10578f67c684..b7a5f61d38ec7ca7fafcac25c184b2cc81d874b5 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2005-01-16  Bud Davis  <bdavis9659@comcast.net>
+
+	PR fortran/18778
+	* gfortran.dg/endfile_2.f90: New test.
+
 2005-01-16  Steven G. Kargl  <kargls@comcast.net>
 
 	PR 19168
diff --git a/gcc/testsuite/gfortran.dg/endfile_2.f90 b/gcc/testsuite/gfortran.dg/endfile_2.f90
new file mode 100644
index 0000000000000000000000000000000000000000..7f366f1e0336f0a6b2a81a6b00639547d42d139b
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/endfile_2.f90
@@ -0,0 +1,12 @@
+! { dg-do run }
+! pr18778 abort on endfile without opening unit 
+      program test
+      implicit none
+      integer i
+      endfile(8)
+      rewind(8)
+      read(8,end=0023)i
+      call abort ! should never get here
+      stop
+ 0023 continue
+      end
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index c0534b8ef442d78e5d9bdbdc022922bd04f6734b..d6bcb8d9cbb0caa685b806c5f9613c0af604e95e 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -1,3 +1,9 @@
+2004-01-16  Bud Davis  <bdavis9659@comcast.net>
+
+	PR fortran/18778
+	* io/transfer.c (us_read): no bytes available is not a
+	runtime error.
+
 2005-01-15  Bud Davis  <bdavis9659@comcast.net>
 
 	PR fortran/18983
diff --git a/libgfortran/io/transfer.c b/libgfortran/io/transfer.c
index 54544079073102633d4c0da0f755f6a7d256f538..73ae853fc87da387b5eb6df41184ae7967a35ede 100644
--- a/libgfortran/io/transfer.c
+++ b/libgfortran/io/transfer.c
@@ -843,6 +843,9 @@ us_read (void)
   n = sizeof (gfc_offset);
   p = salloc_r (current_unit->s, &n);
 
+  if (n == 0)
+    return;  /* end of file */
+
   if (p == NULL || n != sizeof (gfc_offset))
     {
       generate_error (ERROR_BAD_US, NULL);