OSDN Git Service

* scanner.c (skip_free_comments): Return bool instead of void.
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 6 Oct 2006 07:10:55 +0000 (07:10 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 6 Oct 2006 07:10:55 +0000 (07:10 +0000)
(gfc_next_char_literal): Don't return ' ' if & is missing after
!$omp or !$.  Use skip_{free,fixed}_comments directly instead
of gfc_skip_comments.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@117480 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/fortran/ChangeLog
gcc/fortran/scanner.c

index 73715f9..58c1320 100644 (file)
@@ -1,3 +1,10 @@
+2006-10-06  Jakub Jelinek  <jakub@redhat.com>
+
+       * scanner.c (skip_free_comments): Return bool instead of void.
+       (gfc_next_char_literal): Don't return ' ' if & is missing after
+       !$omp or !$.  Use skip_{free,fixed}_comments directly instead
+       of gfc_skip_comments.
+
 2006-10-04  Brooks Moses  <bmoses@stanford.edu>
 
        * gfortran.texi: (Current Status): update and rewrite to reflect
index 59b2e70..a5c0f4f 100644 (file)
@@ -327,9 +327,11 @@ skip_comment_line (void)
 
 
 /* Comment lines are null lines, lines containing only blanks or lines
-   on which the first nonblank line is a '!'.  */
+   on which the first nonblank line is a '!'.
+   Return true if !$ openmp conditional compilation sentinel was
+   seen.  */
 
-static void
+static bool
 skip_free_comments (void)
 {
   locus start;
@@ -379,7 +381,7 @@ skip_free_comments (void)
                              openmp_flag = 1;
                              openmp_locus = old_loc;
                              gfc_current_locus = start;
-                             return;
+                             return false;
                            }
                        }
                      gfc_current_locus = old_loc;
@@ -390,7 +392,7 @@ skip_free_comments (void)
                    {
                      gfc_current_locus = old_loc;
                      next_char ();
-                     return;
+                     return true;
                    }
                }
              gfc_current_locus = old_loc;
@@ -405,6 +407,7 @@ skip_free_comments (void)
   if (openmp_flag && at_bol)
     openmp_flag = 0;
   gfc_current_locus = start;
+  return false;
 }
 
 
@@ -597,6 +600,8 @@ restart:
 
   if (gfc_current_form == FORM_FREE)
     {
+      bool openmp_cond_flag;
+
       if (!in_string && c == '!')
        {
          if (openmp_flag
@@ -668,7 +673,7 @@ restart:
       continue_line = gfc_current_locus.lb->linenum;
 
       /* Now find where it continues. First eat any comment lines.  */
-      gfc_skip_comments ();
+      openmp_cond_flag = skip_free_comments ();
 
       if (prev_openmp_flag != openmp_flag)
        {
@@ -709,6 +714,10 @@ restart:
                gfc_warning_now ("Missing '&' in continued character constant at %C");
              gfc_current_locus.nextc--;
            }
+         /* Both !$omp and !$ -fopenmp continuation lines have & on the
+            continuation line only optionally.  */
+         else if (openmp_flag || openmp_cond_flag)
+           gfc_current_locus.nextc--;
          else
            {
              c = ' ';
@@ -741,7 +750,7 @@ restart:
       old_loc = gfc_current_locus;
 
       gfc_advance_line ();
-      gfc_skip_comments ();
+      skip_fixed_comments ();
 
       /* See if this line is a continuation line.  */
       if (openmp_flag != prev_openmp_flag)