[Fortran] Disable "Assignment to contiguous pointer from non-contiguous target" error
authorCesar Philippidis <cesar@codesourcery.com>
Mon, 8 Oct 2018 14:04:45 +0000 (07:04 -0700)
committerCesar Philippidis <cesar@gcc.gnu.org>
Mon, 8 Oct 2018 14:04:45 +0000 (07:04 -0700)
gcc/fortran/
* expr.c (gfc_check_pointer_assign): Demote "Assignment to
contiguous pointer from non-contiguous target" to a warning.

gcc/testsuite/
* gfortran.dg/contiguous_4.f90: Adjust.
* gfortran.dg/contiguous_4.f90: New test.

From-SVN: r264928

gcc/fortran/ChangeLog
gcc/fortran/expr.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/contiguous_4.f90
gcc/testsuite/gfortran.dg/contiguous_7.f90 [new file with mode: 0644]

index c4c14f866a5037d92768d23651bc0f1cf345eb98..6fc3857e2461cb11eb0b3631605a3d0c60fa6b2a 100644 (file)
@@ -1,3 +1,8 @@
+2018-10-08  Cesar Philippidis  <cesar@codesourcery.com>
+
+       * expr.c (gfc_check_pointer_assign): Demote "Assignment to
+       contiguous pointer from non-contiguous target" to a warning.
+
 2018-10-08  Paul Thomas  <pault@gcc.gnu.org>
 
        PR fortran/86372
index 3315bb840af09492f70693f70fc1867d4c87578c..1cfda5fbfed08e57bb1cfe57744205c2d6a7ec4f 100644 (file)
@@ -3957,13 +3957,13 @@ gfc_check_pointer_assign (gfc_expr *lvalue, gfc_expr *rvalue)
          }
     }
 
-  /* Error for assignments of contiguous pointers to targets which is not
+  /* Warn for assignments of contiguous pointers to targets which is not
      contiguous.  Be lenient in the definition of what counts as
      contiguous.  */
 
   if (lhs_attr.contiguous && !gfc_is_simply_contiguous (rvalue, false, true))
-    gfc_error ("Assignment to contiguous pointer from non-contiguous "
-              "target at %L", &rvalue->where);
+    gfc_warning (OPT_Wextra, "Assignment to contiguous pointer from "
+                "non-contiguous target at %L", &rvalue->where);
 
   /* Warn if it is the LHS pointer may lives longer than the RHS target.  */
   if (warn_target_lifetime
index 28e84d2263bae0af867fee847278c7333f9448fa..9d495d486694e75c22c4fda99f8853bfdd411c71 100644 (file)
@@ -1,3 +1,8 @@
+2018-10-08  Cesar Philippidis  <cesar@codesourcery.com>
+
+       * gfortran.dg/contiguous_4.f90: Adjust.
+       * gfortran.dg/contiguous_4.f90: New test.
+
 2018-10-08  Paul Thomas  <pault@gcc.gnu.org>
 
        PR fortran/86372
index b05dcfbaa84a547c5fe9a6feb4425a2e0d512615..874ef8ba9ecd8c97336d7bb6d7d21437e640844f 100644 (file)
@@ -10,10 +10,10 @@ program cont_01_neg
 
   x = (/ (real(i),i=1,45) /)
   x2 = reshape(x,shape(x2))
-  r => x(::3)   ! { dg-error "Assignment to contiguous pointer" }
-  r2 => x2(2:,:) ! { dg-error "Assignment to contiguous pointer" }
+  r => x(::3)
+  r2 => x2(2:,:)
   r2 => x2(:,2:3)
   r => x2(2:3,1)
   r => x(::1)
-  r => x(::n) ! { dg-error "Assignment to contiguous pointer" }
+  r => x(::n)
 end program
diff --git a/gcc/testsuite/gfortran.dg/contiguous_7.f90 b/gcc/testsuite/gfortran.dg/contiguous_7.f90
new file mode 100644 (file)
index 0000000..cccc89f
--- /dev/null
@@ -0,0 +1,24 @@
+! { dg-do compile }
+! { dg-additional-options "-Wextra" }
+!
+! Ensure that contiguous pointers pointing to noncontiguous pointers
+! to array results in a warning with -Wextra.
+
+program cont_01_neg
+  implicit none
+  real, pointer, contiguous :: r(:)
+  real, pointer, contiguous :: r2(:,:)
+  real, target :: x(45)
+  real, target :: x2(5,9)
+  integer :: i
+  integer :: n=1
+
+  x = (/ (real(i),i=1,45) /)
+  x2 = reshape(x,shape(x2))
+  r => x(::3) ! { dg-warning "ssignment to contiguous pointer from non-contiguous target" }
+  r2 => x2(2:,:) ! { dg-warning "ssignment to contiguous pointer from non-contiguous target" }
+  r2 => x2(:,2:3)
+  r => x2(2:3,1)
+  r => x(::1)
+  r => x(::n) ! { dg-warning "ssignment to contiguous pointer from non-contiguous target" }
+end program