]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR fortran/91714 (Accepts type statement without delimiter in free form)
authorSteven G. Kargl <kargl@gcc.gnu.org>
Tue, 1 Oct 2019 18:37:53 +0000 (18:37 +0000)
committerSteven G. Kargl <kargl@gcc.gnu.org>
Tue, 1 Oct 2019 18:37:53 +0000 (18:37 +0000)
2019-10-01  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/91714
* decl.c (gfc_match_decl_type_spec):  Issue errors for a few
mangled types.

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

PR fortran/91714
* gfortran.dg/dec_type_print_3.f90: Update dg-error regex.
* gfortran.dg/pr91714.f90: New test.

From-SVN: r276421

gcc/fortran/ChangeLog
gcc/fortran/decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/dec_type_print_3.f90
gcc/testsuite/gfortran.dg/pr91714.f90 [new file with mode: 0644]

index d2f47da78a72d898572994399f2d0f80e4ce4580..6d550ef9a36220b8f64cda4cac805dcdb698a691 100644 (file)
@@ -1,3 +1,9 @@
+2019-10-01  Steven G. Kargl  <kargl@gcc.gnu.org>
+
+       PR fortran/91714
+       * decl.c (gfc_match_decl_type_spec):  Issue errors for a few
+       mangled types.
+
 2019-10-01  Steven G. Kargl  <kargl@gcc.gnu.org>
 
        PR fortran/91641
index 3e10dba757e4f6b519b36bbbadf5f7f47171f429..30470911eedaf9d9265f93b72abb0be52df3cc20 100644 (file)
@@ -4417,6 +4417,7 @@ get_kind:
              gfc_next_ascii_char ();
              return MATCH_YES;
            }
+         gfc_error ("Malformed type-spec at %C");
          return MATCH_NO;
        }
     }
@@ -4430,7 +4431,10 @@ get_kind:
     }
 
   if (matched_type && gfc_match_char (')') != MATCH_YES)
-    return MATCH_ERROR;
+    {
+      gfc_error ("Malformed type-spec at %C");
+      return MATCH_ERROR;
+    }
 
   /* Defer association of the KIND expression of function results
      until after USE and IMPORT statements.  */
@@ -10181,6 +10185,20 @@ gfc_match_derived_decl (void)
       return MATCH_ERROR;
     }
 
+  /*  In free source form, need to check for TYPE XXX as oppose to TYPEXXX.
+      But, we need to simply return for TYPE(.  */ 
+  if (m == MATCH_NO && gfc_current_form == FORM_FREE)
+    {
+      char c = gfc_peek_ascii_char ();
+      if (c == '(')
+       return m;
+      if (!gfc_is_whitespace (c))
+       {
+         gfc_error ("Mangled derived type definition at %C");
+         return MATCH_NO;
+       }
+    }
+
   m = gfc_match (" %n ", name);
   if (m != MATCH_YES)
     return m;
@@ -10188,7 +10206,7 @@ gfc_match_derived_decl (void)
   /* Make sure that we don't identify TYPE IS (...) as a parameterized
      derived type named 'is'.
      TODO Expand the check, when 'name' = "is" by matching " (tname) "
-     and checking if this is a(n intrinsic) typename. his picks up
+     and checking if this is a(n intrinsic) typename.  This picks up
      misplaced TYPE IS statements such as in select_type_1.f03.  */
   if (gfc_peek_ascii_char () == '(')
     {
index 50db9f2125ee7c39bb16a0a1b4df52768a22cbcd..106dbb078f837d6795a30603690c2073b25a99e9 100644 (file)
@@ -1,3 +1,9 @@
+2019-10-01  Steven G. Kargl  <kargl@gcc.gnu.org>
+
+       PR fortran/91714
+       * gfortran.dg/dec_type_print_3.f90: Update dg-error regex.
+       * gfortran.dg/pr91714.f90: New test.
+
 2019-10-01  Steven G. Kargl  <kargl@gcc.gnu.org>
 
        PR fortran/91641
index e5b455eea26df50e52d83028f96d342db14eb9bb..6836c257e14aba26656f01046590e058402e1a10 100644 (file)
@@ -8,9 +8,9 @@
 
 include 'dec_type_print.f90'
 
-! { dg-error "Invalid character in name" "" { target *-*-* } 52 }
+! { dg-error "Mangled derived type definition" "" { target *-*-* } 52 }
 ! { dg-error "Invalid character in name" "" { target *-*-* } 53 }
-! { dg-error "Invalid character in name" "" { target *-*-* } 54 }
+! { dg-error "Mangled derived type definition" "" { target *-*-* } 54 }
 ! { dg-error "Invalid character in name" "" { target *-*-* } 55 }
 ! { dg-error "Invalid character in name" "" { target *-*-* } 56 }
 ! { dg-error "Invalid character in name" "" { target *-*-* } 57 }
diff --git a/gcc/testsuite/gfortran.dg/pr91714.f90 b/gcc/testsuite/gfortran.dg/pr91714.f90
new file mode 100644 (file)
index 0000000..8b855d9
--- /dev/null
@@ -0,0 +1,10 @@
+! { dg-do compile }
+! Contributed by Gerhard Steinmetz
+program p
+   typea          ! { dg-error "Mangled derived type" }
+      integer b
+   end type       ! { dg-error "Expecting END PROGRAM" }
+   type(a) :: c   ! { dg-error "is being used before it" }
+   c = a(1)
+   print *, c
+end