Blame SOURCES/gcc7-fortran-fdec-include.patch

726b1e
2018-11-21  Jakub Jelinek  <jakub@redhat.com>
726b1e
	    Mark Eggleston  <mark.eggleston@codethink.com>
726b1e
726b1e
	* lang.opt (fdec-include): New option.
726b1e
	* options.c (set_dec_flags): Set also flag_dec_include.
726b1e
	* scanner.c (include_line): Change return type from bool to int.
726b1e
	In fixed form allow spaces in between include keyword letters.
726b1e
	For -fdec-include, allow in fixed form 0 in column 6.  With
726b1e
	-fdec-include return -1 if the parsed line is not full include
726b1e
	statement and it could be successfully completed on continuation
726b1e
	lines.
726b1e
	(include_stmt): New function.
726b1e
	(load_file): Adjust include_line caller.  If it returns -1, keep
726b1e
	trying include_stmt until it stops returning -1 whenever adding
726b1e
	further line of input.
726b1e
726b1e
--- gcc/fortran/lang.opt
726b1e
+++ gcc/fortran/lang.opt
726b1e
@@ -432,6 +432,10 @@ fdec-pad-with-spaces
726b1e
 Fortran Var(flag_dec_pad_with_spaces)
726b1e
 For character to integer conversions, use spaces for the pad rather than NUL.
726b1e
 
726b1e
+fdec-include
726b1e
+Fortran Var(flag_dec_include)
726b1e
+Enable legacy parsing of INCLUDE as statement.
726b1e
+
726b1e
 fdec-intrinsic-ints
726b1e
 Fortran Var(flag_dec_intrinsic_ints)
726b1e
 Enable kind-specific variants of integer intrinsic functions.
726b1e
--- gcc/fortran/options.c
726b1e
+++ gcc/fortran/options.c
726b1e
@@ -68,6 +68,7 @@ set_dec_flags (int value)
726b1e
   flag_dec_intrinsic_ints |= value;
726b1e
   flag_dec_static |= value;
726b1e
   flag_dec_math |= value;
726b1e
+  flag_dec_include |= value;
726b1e
 }
726b1e
 
726b1e
 
726b1e
--- gcc/fortran/scanner.c
726b1e
+++ gcc/fortran/scanner.c
726b1e
@@ -2135,14 +2135,18 @@ static bool load_file (const char *, const char *, bool);
726b1e
 /* include_line()-- Checks a line buffer to see if it is an include
726b1e
    line.  If so, we call load_file() recursively to load the included
726b1e
    file.  We never return a syntax error because a statement like
726b1e
-   "include = 5" is perfectly legal.  We return false if no include was
726b1e
-   processed or true if we matched an include.  */
726b1e
+   "include = 5" is perfectly legal.  We return 0 if no include was
726b1e
+   processed, 1 if we matched an include or -1 if include was
726b1e
+   partially processed, but will need continuation lines.  */
726b1e
 
726b1e
-static bool
726b1e
+static int
726b1e
 include_line (gfc_char_t *line)
726b1e
 {
726b1e
   gfc_char_t quote, *c, *begin, *stop;
726b1e
   char *filename;
726b1e
+  const char *include = "include";
726b1e
+  bool allow_continuation = flag_dec_include;
726b1e
+  int i;
726b1e
 
726b1e
   c = line;
726b1e
 
726b1e
@@ -2158,42 +2162,133 @@ include_line (gfc_char_t *line)
726b1e
       else
726b1e
 	{
726b1e
 	  if ((*c == '!' || *c == 'c' || *c == 'C' || *c == '*')
726b1e
-	      && c[1] == '$' && (c[2] == ' ' || c[2] == '\t'))
726b1e
+	      && c[1] == '$' && c[2] == ' ')
726b1e
 	    c += 3;
726b1e
 	}
726b1e
     }
726b1e
 
726b1e
-  while (*c == ' ' || *c == '\t')
726b1e
-    c++;
726b1e
+  if (gfc_current_form == FORM_FREE)
726b1e
+    {
726b1e
+      while (*c == ' ' || *c == '\t')
726b1e
+	c++;
726b1e
+      if (gfc_wide_strncasecmp (c, "include", 7))
726b1e
+	{
726b1e
+	  if (!allow_continuation)
726b1e
+	    return 0;
726b1e
+	  for (i = 0; i < 7; ++i)
726b1e
+	    {
726b1e
+	      gfc_char_t c1 = gfc_wide_tolower (*c);
726b1e
+	      if (c1 != (unsigned char) include[i])
726b1e
+		break;
726b1e
+	      c++;
726b1e
+	    }
726b1e
+	  if (i == 0 || *c != '&')
726b1e
+	    return 0;
726b1e
+	  c++;
726b1e
+	  while (*c == ' ' || *c == '\t')
726b1e
+	    c++;
726b1e
+	  if (*c == '\0' || *c == '!')
726b1e
+	    return -1;
726b1e
+	  return 0;
726b1e
+	}
726b1e
 
726b1e
-  if (gfc_wide_strncasecmp (c, "include", 7))
726b1e
-    return false;
726b1e
+      c += 7;
726b1e
+    }
726b1e
+  else
726b1e
+    {
726b1e
+      while (*c == ' ' || *c == '\t')
726b1e
+	c++;
726b1e
+      if (flag_dec_include && *c == '0' && c - line == 5)
726b1e
+	{
726b1e
+	  c++;
726b1e
+	  while (*c == ' ' || *c == '\t')
726b1e
+	    c++;
726b1e
+	}
726b1e
+      if (c - line < 6)
726b1e
+	allow_continuation = false;
726b1e
+      for (i = 0; i < 7; ++i)
726b1e
+	{
726b1e
+	  gfc_char_t c1 = gfc_wide_tolower (*c);
726b1e
+	  if (c1 != (unsigned char) include[i])
726b1e
+	    break;
726b1e
+	  c++;
726b1e
+	  while (*c == ' ' || *c == '\t')
726b1e
+	    c++;
726b1e
+	}
726b1e
+      if (!allow_continuation)
726b1e
+	{
726b1e
+	  if (i != 7)
726b1e
+	    return 0;
726b1e
+	}
726b1e
+      else if (i != 7)
726b1e
+	{
726b1e
+	  if (i == 0)
726b1e
+	    return 0;
726b1e
+
726b1e
+	  /* At the end of line or comment this might be continued.  */
726b1e
+	  if (*c == '\0' || *c == '!')
726b1e
+	    return -1;
726b1e
+
726b1e
+	  return 0;
726b1e
+	}
726b1e
+    }
726b1e
 
726b1e
-  c += 7;
726b1e
   while (*c == ' ' || *c == '\t')
726b1e
     c++;
726b1e
 
726b1e
   /* Find filename between quotes.  */
726b1e
-  
726b1e
+
726b1e
   quote = *c++;
726b1e
   if (quote != '"' && quote != '\'')
726b1e
-    return false;
726b1e
+    {
726b1e
+      if (allow_continuation)
726b1e
+	{
726b1e
+	  if (gfc_current_form == FORM_FREE)
726b1e
+	    {
726b1e
+	      if (quote == '&')
726b1e
+		{
726b1e
+		  while (*c == ' ' || *c == '\t')
726b1e
+		    c++;
726b1e
+		  if (*c == '\0' || *c == '!')
726b1e
+		    return -1;
726b1e
+		}
726b1e
+	    }
726b1e
+	  else if (quote == '\0' || quote == '!')
726b1e
+	    return -1;
726b1e
+	}
726b1e
+      return 0;
726b1e
+    }
726b1e
 
726b1e
   begin = c;
726b1e
 
726b1e
+  bool cont = false;
726b1e
   while (*c != quote && *c != '\0')
726b1e
-    c++;
726b1e
+    {
726b1e
+      if (allow_continuation && gfc_current_form == FORM_FREE)
726b1e
+	{
726b1e
+	  if (*c == '&')
726b1e
+	    cont = true;
726b1e
+	  else if (*c != ' ' && *c != '\t')
726b1e
+	    cont = false;
726b1e
+	}
726b1e
+      c++;
726b1e
+    }
726b1e
 
726b1e
   if (*c == '\0')
726b1e
-    return false;
726b1e
+    {
726b1e
+      if (allow_continuation
726b1e
+	  && (cont || gfc_current_form != FORM_FREE))
726b1e
+	return -1;
726b1e
+      return 0;
726b1e
+    }
726b1e
 
726b1e
   stop = c++;
726b1e
-  
726b1e
+
726b1e
   while (*c == ' ' || *c == '\t')
726b1e
     c++;
726b1e
 
726b1e
   if (*c != '\0' && *c != '!')
726b1e
-    return false;
726b1e
+    return 0;
726b1e
 
726b1e
   /* We have an include line at this point.  */
726b1e
 
726b1e
@@ -2205,9 +2300,130 @@ include_line (gfc_char_t *line)
726b1e
     exit (FATAL_EXIT_CODE);
726b1e
 
726b1e
   free (filename);
726b1e
-  return true;
726b1e
+  return 1;
726b1e
 }
726b1e
 
726b1e
+/* Similarly, but try to parse an INCLUDE statement, using gfc_next_char etc.
726b1e
+   APIs.  Return 1 if recognized as valid INCLUDE statement and load_file has
726b1e
+   been called, 0 if it is not a valid INCLUDE statement and -1 if eof has
726b1e
+   been encountered while parsing it.  */
726b1e
+static int
726b1e
+include_stmt (gfc_linebuf *b)
726b1e
+{
726b1e
+  int ret = 0, i, length;
726b1e
+  const char *include = "include";
726b1e
+  gfc_char_t c, quote = 0;
726b1e
+  locus str_locus;
726b1e
+  char *filename;
726b1e
+
726b1e
+  continue_flag = 0;
726b1e
+  end_flag = 0;
726b1e
+  gcc_attribute_flag = 0;
726b1e
+  openmp_flag = 0;
726b1e
+  openacc_flag = 0;
726b1e
+  continue_count = 0;
726b1e
+  continue_line = 0;
726b1e
+  gfc_current_locus.lb = b;
726b1e
+  gfc_current_locus.nextc = b->line;
726b1e
+
726b1e
+  gfc_skip_comments ();
726b1e
+  gfc_gobble_whitespace ();
726b1e
+
726b1e
+  for (i = 0; i < 7; i++)
726b1e
+    {
726b1e
+      c = gfc_next_char ();
726b1e
+      if (c != (unsigned char) include[i])
726b1e
+	{
726b1e
+	  if (gfc_current_form == FORM_FIXED
726b1e
+	      && i == 0
726b1e
+	      && c == '0'
726b1e
+	      && gfc_current_locus.nextc == b->line + 6)
726b1e
+	    {
726b1e
+	      gfc_gobble_whitespace ();
726b1e
+	      i--;
726b1e
+	      continue;
726b1e
+	    }
726b1e
+	  gcc_assert (i != 0);
726b1e
+	  if (c == '\n')
726b1e
+	    {
726b1e
+	      gfc_advance_line ();
726b1e
+	      gfc_skip_comments ();
726b1e
+	      if (gfc_at_eof ())
726b1e
+		ret = -1;
726b1e
+	    }
726b1e
+	  goto do_ret;
726b1e
+	}
726b1e
+    }
726b1e
+  gfc_gobble_whitespace ();
726b1e
+
726b1e
+  c = gfc_next_char ();
726b1e
+  if (c == '\'' || c == '"')
726b1e
+    quote = c;
726b1e
+  else
726b1e
+    {
726b1e
+      if (c == '\n')
726b1e
+	{
726b1e
+	  gfc_advance_line ();
726b1e
+	  gfc_skip_comments ();
726b1e
+	  if (gfc_at_eof ())
726b1e
+	    ret = -1;
726b1e
+	}
726b1e
+      goto do_ret;
726b1e
+    }
726b1e
+
726b1e
+  str_locus = gfc_current_locus;
726b1e
+  length = 0;
726b1e
+  do
726b1e
+    {
726b1e
+      c = gfc_next_char_literal (INSTRING_NOWARN);
726b1e
+      if (c == quote)
726b1e
+	break;
726b1e
+      if (c == '\n')
726b1e
+	{
726b1e
+	  gfc_advance_line ();
726b1e
+	  gfc_skip_comments ();
726b1e
+	  if (gfc_at_eof ())
726b1e
+	    ret = -1;
726b1e
+	  goto do_ret;
726b1e
+	}
726b1e
+      length++;
726b1e
+    }
726b1e
+  while (1);
726b1e
+
726b1e
+  gfc_gobble_whitespace ();
726b1e
+  c = gfc_next_char ();
726b1e
+  if (c != '\n')
726b1e
+    goto do_ret;
726b1e
+
726b1e
+  gfc_current_locus = str_locus;
726b1e
+  ret = 1;
726b1e
+  filename = XNEWVEC (char, length + 1);
726b1e
+  for (i = 0; i < length; i++)
726b1e
+    {
726b1e
+      c = gfc_next_char_literal (INSTRING_WARN);
726b1e
+      gcc_assert (gfc_wide_fits_in_byte (c));
726b1e
+      filename[i] = (unsigned char) c;
726b1e
+    }
726b1e
+  filename[length] = '\0';
726b1e
+  if (!load_file (filename, NULL, false))
726b1e
+    exit (FATAL_EXIT_CODE);
726b1e
+
726b1e
+  free (filename);
726b1e
+
726b1e
+do_ret:
726b1e
+  continue_flag = 0;
726b1e
+  end_flag = 0;
726b1e
+  gcc_attribute_flag = 0;
726b1e
+  openmp_flag = 0;
726b1e
+  openacc_flag = 0;
726b1e
+  continue_count = 0;
726b1e
+  continue_line = 0;
726b1e
+  memset (&gfc_current_locus, '\0', sizeof (locus));
726b1e
+  memset (&openmp_locus, '\0', sizeof (locus));
726b1e
+  memset (&openacc_locus, '\0', sizeof (locus));
726b1e
+  memset (&gcc_attribute_locus, '\0', sizeof (locus));
726b1e
+  return ret;
726b1e
+}
726b1e
 
726b1e
 /* Load a file into memory by calling load_line until the file ends.  */
726b1e
 
726b1e
@@ -2215,7 +2431,7 @@ static bool
726b1e
 load_file (const char *realfilename, const char *displayedname, bool initial)
726b1e
 {
726b1e
   gfc_char_t *line;
726b1e
-  gfc_linebuf *b;
726b1e
+  gfc_linebuf *b, *include_b = NULL;
726b1e
   gfc_file *f;
726b1e
   FILE *input;
726b1e
   int len, line_len;
726b1e
@@ -2318,6 +2534,7 @@ load_file (const char *realfilename, const char *displayedname, bool initial)
726b1e
   for (;;)
726b1e
     {
726b1e
       int trunc = load_line (input, &line, &line_len, NULL);
726b1e
+      int inc_line;
726b1e
 
726b1e
       len = gfc_wide_strlen (line);
726b1e
       if (feof (input) && len == 0)
726b1e
@@ -2366,11 +2583,12 @@ load_file (const char *realfilename, const char *displayedname, bool initial)
726b1e
 	}
726b1e
 
726b1e
       /* Preprocessed files have preprocessor lines added before the byte
726b1e
-         order mark, so first_line is not about the first line of the file
726b1e
+	 order mark, so first_line is not about the first line of the file
726b1e
 	 but the first line that's not a preprocessor line.  */
726b1e
       first_line = false;
726b1e
 
726b1e
-      if (include_line (line))
726b1e
+      inc_line = include_line (line);
726b1e
+      if (inc_line > 0)
726b1e
 	{
726b1e
 	  current_file->line++;
726b1e
 	  continue;
726b1e
@@ -2403,6 +2621,36 @@ load_file (const char *realfilename, const char *displayedname, bool initial)
726b1e
 
726b1e
       while (file_changes_cur < file_changes_count)
726b1e
 	file_changes[file_changes_cur++].lb = b;
726b1e
+
726b1e
+      if (flag_dec_include)
726b1e
+	{
726b1e
+	  if (include_b && b != include_b)
726b1e
+	    {
726b1e
+	      int inc_line2 = include_stmt (include_b);
726b1e
+	      if (inc_line2 == 0)
726b1e
+		include_b = NULL;
726b1e
+	      else if (inc_line2 > 0)
726b1e
+		{
726b1e
+		  do
726b1e
+		    {
726b1e
+		      if (gfc_current_form == FORM_FIXED)
726b1e
+			{
726b1e
+			  for (gfc_char_t *p = include_b->line; *p; p++)
726b1e
+			    *p = ' ';
726b1e
+			}
726b1e
+		      else
726b1e
+			include_b->line[0] = '\0';
726b1e
+                      if (include_b == b)
726b1e
+			break;
726b1e
+		      include_b = include_b->next;
726b1e
+		    }
726b1e
+		  while (1);
726b1e
+		  include_b = NULL;
726b1e
+		}
726b1e
+	    }
726b1e
+	  if (inc_line == -1 && !include_b)
726b1e
+	    include_b = b;
726b1e
+	}
726b1e
     }
726b1e
 
726b1e
   /* Release the line buffer allocated in load_line.  */
726b1e
--- /dev/null
726b1e
+++ gcc/testsuite/gfortran.dg/gomp/include_1.f
726b1e
@@ -0,0 +1,49 @@
726b1e
+c { dg-do compile }
726b1e
+c { dg-options "-fopenmp -fdec" }
726b1e
+      subroutine foo
726b1e
+      implicit none
726b1e
+c$   0include 'include_1.inc'
726b1e
+      i = 1
726b1e
+      end subroutine foo
726b1e
+      subroutine bar
726b1e
+      implicit none
726b1e
+      i
726b1e
+C$   ;n
726b1e
+     +c
726b1e
+                 
726b1e
+c   some comment
726b1e
+
726b1e
+*$   ll
726b1e
+C comment line
726b1e
+     uu
726b1e
+     DD
726b1e
+     ee'include_1.inc'
726b1e
+      i = 1
726b1e
+      end subroutine bar
726b1e
+      subroutine baz
726b1e
+      implicit none
726b1e
+     0include
726b1e
+     + 'include_1.inc'
726b1e
+      i = 1
726b1e
+      end subroutine baz
726b1e
+      subroutine qux
726b1e
+      implicit none
726b1e
+!$     i   n   C   lude                                             'inc
726b1e
+* another comment line
726b1e
+     &lude_1.inc'
726b1e
+      i = 1
726b1e
+      end subroutine qux
726b1e
+       subroutine quux
726b1e
+       implicit none
726b1e
+C$   0inc
726b1e
+*$   1lud
726b1e
+c$   2e                                                                '
726b1e
+!$   3include_1.inc'
726b1e
+      i = 1
726b1e
+      end subroutine quux
726b1e
+      program include_12
726b1e
+      implicit none
726b1e
+      include
726b1e
+! comment
726b1e
+c$   +'include_1.inc'
726b1e
+      end program
726b1e
--- /dev/null
726b1e
+++ gcc/testsuite/gfortran.dg/gomp/include_1.inc
726b1e
@@ -0,0 +1 @@
726b1e
+      integer i
726b1e
--- /dev/null
726b1e
+++ gcc/testsuite/gfortran.dg/gomp/include_2.f90
726b1e
@@ -0,0 +1,32 @@
726b1e
+! { dg-do compile }
726b1e
+! { dg-options "-fopenmp -fdec-include" }
726b1e
+subroutine foo
726b1e
+  implicit none
726b1e
+!$  incl& ! comment1
726b1e
+!$ &u&
726b1e
+!$       &de           &     ! comment2
726b1e
+!$ 'include&
726b1e
+  &_1.inc'
726b1e
+  i = 1
726b1e
+end subroutine foo
726b1e
+subroutine bar
726b1e
+  implicit none
726b1e
+!$ include &
726b1e
+
726b1e
+! comment3
726b1e
+
726b1e
+!$ "include_1.inc"
726b1e
+  i = 1
726b1e
+end subroutine bar
726b1e
+subroutine baz
726b1e
+  implicit none
726b1e
+!$                                  include&
726b1e
+!$ &'include_1.&
726b1e
+!$ &inc'
726b1e
+  i = 1
726b1e
+end subroutine baz
726b1e
+subroutine qux
726b1e
+  implicit none
726b1e
+!$  include '&
726b1e
+include_1.inc'
726b1e
+end subroutine qux
726b1e
--- /dev/null
726b1e
+++ gcc/testsuite/gfortran.dg/include_10.f
726b1e
@@ -0,0 +1,11 @@
726b1e
+c { dg-do compile }
726b1e
+      subroutine foo
726b1e
+      implicit none
726b1e
+      include 'include_10.inc'
726b1e
+      i = 1
726b1e
+      end subroutine foo
726b1e
+      subroutine bar
726b1e
+      implicit none
726b1e
+      i n cl UD e'include_10.inc'
726b1e
+      i = 1
726b1e
+      end subroutine bar
726b1e
--- /dev/null
726b1e
+++ gcc/testsuite/gfortran.dg/include_10.inc
726b1e
@@ -0,0 +1 @@
726b1e
+      integer i
726b1e
--- /dev/null
726b1e
+++ gcc/testsuite/gfortran.dg/include_11.f
726b1e
@@ -0,0 +1,20 @@
726b1e
+c { dg-do compile }
726b1e
+      subroutine foo
726b1e
+      implicit none
726b1e
+c We used to accept following in fixed mode.  Shall we at least
726b1e
+c warn about it?
726b1e
+include 'include_10.inc'
726b1e
+      i = 1
726b1e
+      end subroutine foo
726b1e
+      subroutine bar
726b1e
+c Likewise here.
726b1e
+      implicit none
726b1e
+  include'include_10.inc'
726b1e
+      i = 1
726b1e
+      end subroutine bar
726b1e
+      subroutine baz
726b1e
+c And here.
726b1e
+      implicit none
726b1e
+     include 'include_10.inc'
726b1e
+      i = 1
726b1e
+      end subroutine baz
726b1e
--- /dev/null
726b1e
+++ gcc/testsuite/gfortran.dg/include_12.f
726b1e
@@ -0,0 +1,65 @@
726b1e
+c { dg-do compile }
726b1e
+c { dg-options "-fdec-include" }
726b1e
+      subroutine foo
726b1e
+      implicit none
726b1e
+     0include 'include_10.inc'
726b1e
+      i = 1
726b1e
+      end subroutine foo
726b1e
+      subroutine bar
726b1e
+      implicit none
726b1e
+      i
726b1e
+     ;n
726b1e
+     +c
726b1e
+                 
726b1e
+c   some comment
726b1e
+
726b1e
+     ll
726b1e
+C comment line
726b1e
+     uu
726b1e
+     DD
726b1e
+     ee'include_10.inc'
726b1e
+      i = 1
726b1e
+      end subroutine bar
726b1e
+      subroutine baz
726b1e
+      implicit none
726b1e
+     0include
726b1e
+     + 'include_10.inc'
726b1e
+      i = 1
726b1e
+      end subroutine baz
726b1e
+      subroutine qux
726b1e
+      implicit none
726b1e
+       i   n   C   lude                                             'inc
726b1e
+* another comment line
726b1e
+     &lude_10.inc'
726b1e
+      i = 1
726b1e
+      end subroutine qux
726b1e
+       subroutine quux
726b1e
+       implicit none
726b1e
+     0inc
726b1e
+     1lud
726b1e
+     2e                                                                '
726b1e
+     3include_10.inc'
726b1e
+      i = 1
726b1e
+      end subroutine quux
726b1e
+      program include_12
726b1e
+      implicit none
726b1e
+      include
726b1e
+! comment
726b1e
+     +'include_10.inc'
726b1e
+      end program
726b1e
+      subroutine quuz
726b1e
+      implicit none
726b1e
+      integer include
726b1e
+      include
726b1e
+     +"include_10.inc"
726b1e
+      i = 1
726b1e
+      include
726b1e
+     + = 2
726b1e
+      write (*,*) include
726b1e
+      end subroutine quuz
726b1e
+      subroutine corge
726b1e
+      implicit none
726b1e
+      include
726b1e
+     +'include_10.inc'
726b1e
+      i = 1
726b1e
+      end subroutine corge
726b1e
--- /dev/null
726b1e
+++ gcc/testsuite/gfortran.dg/include_13.f90
726b1e
@@ -0,0 +1,44 @@
726b1e
+! { dg-do compile }
726b1e
+! { dg-options "-fdec" }
726b1e
+subroutine foo
726b1e
+  implicit none
726b1e
+  incl& ! comment1
726b1e
+&u&
726b1e
+       &de           &     ! comment2
726b1e
+'include&
726b1e
+  &_10.inc'
726b1e
+  i = 1
726b1e
+end subroutine foo
726b1e
+subroutine bar
726b1e
+  implicit none
726b1e
+include &
726b1e
+
726b1e
+! comment3
726b1e
+
726b1e
+"include_10.inc"
726b1e
+  i = 1
726b1e
+end subroutine bar
726b1e
+subroutine baz
726b1e
+  implicit none
726b1e
+                                  include&
726b1e
+&'include_10.&
726b1e
+&inc'
726b1e
+  i = 1
726b1e
+end subroutine baz
726b1e
+subroutine qux
726b1e
+  implicit none
726b1e
+  include '&
726b1e
+include_10.inc'
726b1e
+end subroutine qux
726b1e
+subroutine quux
726b1e
+  implicit none
726b1e
+  include &
726b1e
+  &'include_10.inc'
726b1e
+  i = 1
726b1e
+end subroutine quux
726b1e
+subroutine quuz
726b1e
+  implicit none
726b1e
+  include &
726b1e
+  &"include_10.inc"
726b1e
+  i = 1
726b1e
+end subroutine quuz