re PR fortran/90988 (Wrong error message with variables named "PUBLIC*")
authorSteven G. Kargl <kargl@gcc.gnu.org>
Fri, 1 Nov 2019 16:27:38 +0000 (16:27 +0000)
committerSteven G. Kargl <kargl@gcc.gnu.org>
Fri, 1 Nov 2019 16:27:38 +0000 (16:27 +0000)
2019-11-01  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/90988
* decl.c (gfc_match_private, gfc_match_public): Fixed-form source code
does not require whitespace between PRIVATE (or PUBLIC) and an entity.

2019-11-01  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/90988
* gfortran.dg/pr90988_4.f: New test.

From-SVN: r277714

gcc/fortran/ChangeLog
gcc/fortran/decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/pr90988_4.f [new file with mode: 0644]

index be8ae58f685794f99785225098141dbba0032c99..34d7a718c3380bf10526fe689712010d276a0e36 100644 (file)
@@ -1,3 +1,9 @@
+2019-11-01  Steven G. Kargl  <kargl@gcc.gnu.org>
+
+       PR fortran/90988
+       * decl.c (gfc_match_private, gfc_match_public): Fixed-form source code
+       does not require whitespace between PRIVATE (or PUBLIC) and an entity.
+
 2019-11-01  Tobias Burnus  <tobias@codesourcery.com>
 
        * f95-lang.c (LANG_HOOKS_OMP_ARRAY_DATA): Set to gfc_omp_array_data.
index 25a3967fac85e46408e3b40008293381b5bf52be..652b578b0dd944f07e950e1a162b4445fa2fbd54 100644 (file)
@@ -9059,7 +9059,6 @@ match
 gfc_match_private (gfc_statement *st)
 {
   gfc_state_data *prev;
-  char c;
 
   if (gfc_match ("private") != MATCH_YES)
     return MATCH_NO;
@@ -9083,10 +9082,14 @@ gfc_match_private (gfc_statement *st)
       return MATCH_YES;
     }
 
-  /* At this point, PRIVATE must be followed by whitespace or ::.  */
-  c = gfc_peek_ascii_char ();
-  if (!gfc_is_whitespace (c) && c != ':')
-    return MATCH_NO;
+  /* At this point in free-form source code, PRIVATE must be followed
+     by whitespace or ::.  */
+  if (gfc_current_form == FORM_FREE)
+    {
+      char c = gfc_peek_ascii_char ();
+      if (!gfc_is_whitespace (c) && c != ':')
+       return MATCH_NO;
+    }
 
   prev = gfc_state_stack->previous;
   if (gfc_current_state () != COMP_MODULE
@@ -9108,8 +9111,6 @@ gfc_match_private (gfc_statement *st)
 match
 gfc_match_public (gfc_statement *st)
 {
-  char c;
-
   if (gfc_match ("public") != MATCH_YES)
     return MATCH_NO;
 
@@ -9127,10 +9128,14 @@ gfc_match_public (gfc_statement *st)
       return MATCH_YES;
     }
 
-  /* At this point, PUBLIC must be followed by whitespace or ::.  */
-  c = gfc_peek_ascii_char ();
-  if (!gfc_is_whitespace (c) && c != ':')
-    return MATCH_NO;
+  /* At this point in free-form source code, PUBLIC must be followed
+     by whitespace or ::.  */
+  if (gfc_current_form == FORM_FREE)
+    {
+      char c = gfc_peek_ascii_char ();
+      if (!gfc_is_whitespace (c) && c != ':')
+       return MATCH_NO;
+    }
 
   if (gfc_current_state () != COMP_MODULE)
     {
index 57709cc911c437019f27514138351034c7282bf0..e7dec2ec88268a6b1de55ee53438163638547d5a 100644 (file)
@@ -1,3 +1,8 @@
+2019-11-01  Steven G. Kargl  <kargl@gcc.gnu.org>
+
+       PR fortran/90988
+       * gfortran.dg/pr90988_4.f: New test.
+
 2019-11-01  Martin Sebor  <msebor@redhat.com>
 
        * gcc.dg/tree-ssa/builtin-sprintf-warn-3.c: Declare test functions
diff --git a/gcc/testsuite/gfortran.dg/pr90988_4.f b/gcc/testsuite/gfortran.dg/pr90988_4.f
new file mode 100644 (file)
index 0000000..3379b2e
--- /dev/null
@@ -0,0 +1,10 @@
+c { dg-do compile }
+       module foo
+          implicit none
+          real a,b,c
+          integer i,j,k
+          public a,b
+          publicc
+          private i,j
+          privatek
+       end module foo