From 94b00ee4e1126901db295a7223b3c6d7c5b1868d Mon Sep 17 00:00:00 2001
From: Jakub Jelinek <jakub@redhat.com>
Date: Thu, 14 Jul 2005 09:15:00 +0200
Subject: [PATCH] re PR fortran/22417 (gfortran preprocessing regression:
 nonsense warning about file left but not entered)

	PR fortran/22417
	* scanner.c (preprocessor_line): Don't treat flag 3 as the start of a new
	file.  Fix file left but not entered warning.

	* gfortran.dg/g77/cpp5.F: New test.
	* gfortran.dg/g77/cpp5.h: New file.
	* gfortran.dg/g77/cpp5inc.h: New file.

From-SVN: r102010
---
 gcc/fortran/ChangeLog                   | 6 ++++++
 gcc/fortran/scanner.c                   | 8 ++++----
 gcc/testsuite/ChangeLog                 | 7 +++++++
 gcc/testsuite/gfortran.dg/g77/cpp5.F    | 4 ++++
 gcc/testsuite/gfortran.dg/g77/cpp5.h    | 3 +++
 gcc/testsuite/gfortran.dg/g77/cpp5inc.h | 1 +
 6 files changed, 25 insertions(+), 4 deletions(-)
 create mode 100644 gcc/testsuite/gfortran.dg/g77/cpp5.F
 create mode 100644 gcc/testsuite/gfortran.dg/g77/cpp5.h
 create mode 100644 gcc/testsuite/gfortran.dg/g77/cpp5inc.h

diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index a4897da6434b..5f17e5edc6b7 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2005-07-14  Jakub Jelinek  <jakub@redhat.com>
+
+	PR fortran/22417
+	* scanner.c (preprocessor_line): Don't treat flag 3 as the start of a new
+	file.  Fix file left but not entered warning.
+
 2005-07-14  Feng Wang  <fengwang@nudt.edu.cn>
 	Steven G. Kargl  <kargls@comcast.net>
 
diff --git a/gcc/fortran/scanner.c b/gcc/fortran/scanner.c
index fe28820a62a6..eee3a684fc3e 100644
--- a/gcc/fortran/scanner.c
+++ b/gcc/fortran/scanner.c
@@ -899,7 +899,7 @@ preprocessor_line (char *c)
 
   /* Interpret flags.  */
 
-  if (flag[1] || flag[3]) /* Starting new file.  */
+  if (flag[1]) /* Starting new file.  */
     {
       f = get_file (filename, LC_RENAME);
       f->up = current_file;
@@ -908,15 +908,15 @@ preprocessor_line (char *c)
 
   if (flag[2]) /* Ending current file.  */
     {
-      if (strcmp (current_file->filename, filename) != 0)
+      if (!current_file->up
+	  || strcmp (current_file->up->filename, filename) != 0)
 	{
 	  gfc_warning_now ("%s:%d: file %s left but not entered",
 			   current_file->filename, current_file->line,
 			   filename);
 	  return;
 	}
-      if (current_file->up)
-	current_file = current_file->up;
+      current_file = current_file->up;
     }
 
   /* The name of the file can be a temporary file produced by
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index b3585c7d75ba..d0c2c653efab 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,10 @@
+2005-07-14  Jakub Jelinek  <jakub@redhat.com>
+
+	PR fortran/22417
+	* gfortran.dg/g77/cpp5.F: New test.
+	* gfortran.dg/g77/cpp5.h: New file.
+	* gfortran.dg/g77/cpp5inc.h: New file.
+
 2005-07-12  Paul Thomas  <pault@gcc.gnu.org>
 
 	PR libfortran/16435
diff --git a/gcc/testsuite/gfortran.dg/g77/cpp5.F b/gcc/testsuite/gfortran.dg/g77/cpp5.F
new file mode 100644
index 000000000000..8e35d78ea381
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/g77/cpp5.F
@@ -0,0 +1,4 @@
+	! { dg-do run }
+#include "cpp5.h"
+	IF (FOO().NE.1) CALL ABORT ()
+	END
diff --git a/gcc/testsuite/gfortran.dg/g77/cpp5.h b/gcc/testsuite/gfortran.dg/g77/cpp5.h
new file mode 100644
index 000000000000..2e77f6a692f8
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/g77/cpp5.h
@@ -0,0 +1,3 @@
+	FUNCTION FOO()
+#include "cpp5inc.h"
+	END FUNCTION
diff --git a/gcc/testsuite/gfortran.dg/g77/cpp5inc.h b/gcc/testsuite/gfortran.dg/g77/cpp5inc.h
new file mode 100644
index 000000000000..3cc86cd0d180
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/g77/cpp5inc.h
@@ -0,0 +1 @@
+	FOO = 1
-- 
GitLab