re PR fortran/85839 ([F2018] warn for obsolescent features)
authorJanus Weil <janus@gcc.gnu.org>
Fri, 25 May 2018 06:09:10 +0000 (08:09 +0200)
committerJanus Weil <janus@gcc.gnu.org>
Fri, 25 May 2018 06:09:10 +0000 (08:09 +0200)
2018-05-25  Janus Weil  <janus@gcc.gnu.org>

PR fortran/85839
* match.c (gfc_match_block_data): Call gfc_notify_std to warn about
an obsolescent feature in Fortran 2018.
(gfc_match_equivalence): Ditto.
* resolve.c (resolve_common_blocks): Ditto.
(gfc_resolve_forall): Ditto.
* symbol.c (gfc_define_st_label): Ditto.

2018-05-25  Janus Weil  <janus@gcc.gnu.org>

PR fortran/85839
* gfortran.dg/f2018_obs.f90: New test case.

From-SVN: r260705

gcc/fortran/ChangeLog
gcc/fortran/match.c
gcc/fortran/resolve.c
gcc/fortran/symbol.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/f2018_obs.f90 [new file with mode: 0644]

index 98fbfd1d50ae2508d7c258eeb2ad8d486021adf0..63d42976676aae2f163442ecb7b341eceebe9a05 100644 (file)
@@ -1,3 +1,13 @@
+2018-05-25  Janus Weil  <janus@gcc.gnu.org>
+
+       PR fortran/85839
+       * match.c (gfc_match_block_data): Call gfc_notify_std to warn about
+       an obsolescent feature in Fortran 2018.
+       (gfc_match_equivalence): Ditto.
+       * resolve.c (resolve_common_blocks): Ditto.
+       (gfc_resolve_forall): Ditto.
+       * symbol.c (gfc_define_st_label): Ditto.
+
 2018-05-24  Steven G. Kargl  <kargl@gcc.gnu.org>
 
        PR fortran/85543
index 8379ff579449d01d0ecb9e0005d02bc635c0fe46..1ab0e0fad9a6392edb5aad7756753b7c654e8630 100644 (file)
@@ -5259,6 +5259,10 @@ gfc_match_block_data (void)
   gfc_symbol *sym;
   match m;
 
+  if (!gfc_notify_std (GFC_STD_F2018_OBS, "BLOCK DATA construct at %L",
+      &gfc_current_locus))
+    return MATCH_ERROR;
+
   if (gfc_match_eos () == MATCH_YES)
     {
       gfc_new_block = NULL;
@@ -5575,6 +5579,9 @@ gfc_match_equivalence (void)
        }
     }
 
+  if (!gfc_notify_std (GFC_STD_F2018_OBS, "EQUIVALENCE statement at %C"))
+    return MATCH_ERROR;
+
   return MATCH_YES;
 
 syntax:
index 43b1dedd2b266c564c408fbc811a4d6891e60477..3a0ff80ab89b7819ea6c0f9b3ce86b26047fde5a 100644 (file)
@@ -997,6 +997,10 @@ resolve_common_blocks (gfc_symtree *common_root)
 
   resolve_common_vars (common_root->n.common, true);
 
+  if (!gfc_notify_std (GFC_STD_F2018_OBS, "COMMON block at %L",
+                      &common_root->n.common->where))
+    return;
+
   /* The common name is a global name - in Fortran 2003 also if it has a
      C binding name, since Fortran 2008 only the C binding name is a global
      identifier.  */
@@ -9930,6 +9934,9 @@ gfc_resolve_forall (gfc_code *code, gfc_namespace *ns, int forall_save)
 
   old_nvar = nvar;
 
+  if (!gfc_notify_std (GFC_STD_F2018_OBS, "FORALL construct at %L", &code->loc))
+    return;
+
   /* Start to resolve a FORALL construct   */
   if (forall_save == 0)
     {
index 5538763732a59a3e03fba14eb2548fdf1b02993f..4f060633da113f8fbcf47a3b5216f4e09f8fe849 100644 (file)
@@ -2725,6 +2725,10 @@ gfc_define_st_label (gfc_st_label *lp, gfc_sl_type type, locus *label_locus)
                                  "DO termination statement which is not END DO"
                                  " or CONTINUE with label %d at %C", labelno))
            return;
+         if (type == ST_LABEL_DO_TARGET
+             && !gfc_notify_std (GFC_STD_F2018_OBS, "Labeled DO statement "
+                                 "at %L", label_locus))
+           return;
          break;
 
        default:
index bdf5e846b090daab1873f50e8c1d3423f153b9c4..59b230956e8242e33663baffaac879bf06ae0947 100644 (file)
@@ -1,3 +1,8 @@
+2018-05-25  Janus Weil  <janus@gcc.gnu.org>
+
+       PR fortran/85839
+       * gfortran.dg/f2018_obs.f90: New test case.
+
 2018-05-24  Steven G. Kargl  <kargl@gcc.gnu.org>
 
        PR fortran/85543
diff --git a/gcc/testsuite/gfortran.dg/f2018_obs.f90 b/gcc/testsuite/gfortran.dg/f2018_obs.f90
new file mode 100644 (file)
index 0000000..0a8dca9
--- /dev/null
@@ -0,0 +1,29 @@
+! { dg-do compile }
+! { dg-options "-std=f2018" }
+!
+! PR 85839: [F2018] warn for obsolescent features
+!
+! Contributed by Janus Weil <janus@gcc.gnu.org>
+
+block data                           ! { dg-warning "obsolescent feature" }
+  common /a/ y(3)                    ! { dg-warning "obsolescent feature" }
+  data y /3*1./
+end
+
+program f2018_obs
+
+  implicit none
+  integer :: a(10),b(10),j(8),i
+  real :: x(3)
+  common /c/ x                       ! { dg-warning "obsolescent feature" }
+
+  equivalence (a(10),b(1))           ! { dg-warning "obsolescent feature" }
+
+  do 99 i=1,10
+99 continue                          ! { dg-warning "obsolescent feature" }
+
+  j = (/ 0, 1, 2, 3, 4, 0, 6, 7  /)
+  forall (i=1:8, j(i) /= 0)          ! { dg-warning "obsolescent feature" }
+    j(i) = 0
+  end forall
+end