re PR fortran/80142 (Warning: No location in expression ... with -O / -ffrontend...
authorThomas Koenig <tkoenig@gcc.gnu.org>
Wed, 22 Mar 2017 15:20:17 +0000 (15:20 +0000)
committerThomas Koenig <tkoenig@gcc.gnu.org>
Wed, 22 Mar 2017 15:20:17 +0000 (15:20 +0000)
2017-03-22  Thomas Koenig  <tkoenig@gcc.gnu.org>

PR fortran/80142
* frontend-passes.c (combine_array_constructor): Take
location of new expression from constructor expression instead
of constructor.

2017-03-22  Thomas Koenig  <tkoenig@gcc.gnu.org>

PR fortran/80142
* gfortran.dg/any_loc.f90: New test case.

From-SVN: r246388

gcc/fortran/ChangeLog
gcc/fortran/frontend-passes.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/any_loc.f90 [new file with mode: 0644]

index 5c99e1fb24ade5a8343a654f5546536d71e41c91..1dce756ecc6c4618ba5e467c5b8172417e3ff965 100644 (file)
@@ -1,3 +1,10 @@
+2017-03-22  Thomas Koenig  <tkoenig@gcc.gnu.org>
+
+       PR fortran/80142
+       * frontend-passes.c (combine_array_constructor): Take
+       location of new expression from constructor expression instead
+       of constructor.
+
 2017-03-18  Paul Thomas  <pault@gcc.gnu.org>
 
        PR fortran/79676
index b255e98af31c36bd18cf185a181d009ebd553f84..459967d5c35b62471aecce1c0b592e985fd80b37 100644 (file)
@@ -1381,7 +1381,7 @@ combine_array_constructor (gfc_expr *e)
       new_expr->ts = e->ts;
       new_expr->expr_type = EXPR_OP;
       new_expr->rank = c->expr->rank;
-      new_expr->where = c->where;
+      new_expr->where = c->expr->where;
       new_expr->value.op.op = e->value.op.op;
 
       if (scalar_first)
index ead24fa48d394c4c57bde66f250fb9adc62b0b73..53474a1b1aa2aed3b75663ad617986db5ff63773 100644 (file)
@@ -1,3 +1,8 @@
+2017-03-22  Thomas Koenig  <tkoenig@gcc.gnu.org>
+
+       PR fortran/80142
+       * gfortran.dg/any_loc.f90: New test case.
+
 2017-03-22  Thomas Preud'homme  <thomas.preudhomme@arm.com>
 
        PR target/80082
diff --git a/gcc/testsuite/gfortran.dg/any_loc.f90 b/gcc/testsuite/gfortran.dg/any_loc.f90
new file mode 100644 (file)
index 0000000..1a22050
--- /dev/null
@@ -0,0 +1,27 @@
+! { dg-do compile }
+! { dg-options "-ffrontend-optimize" }
+! PR fortran/80142 - the location on the expression of the
+! unrolled any statement was not correctly set.
+! Test case by Harald Anlauf.
+MODULE gfcbug140
+  implicit none
+  integer ,parameter :: WV_NONE        =  1
+  integer, parameter :: WV_CDV_4       =  23
+  integer, parameter :: WV_CDV_8       =  24
+  integer, parameter :: wv_CDV_list(2) = [ WV_CDV_4, WV_CDV_8 ]
+  integer            :: basis          = WV_NONE
+contains
+  subroutine wave_1d (x)
+    real, intent(inout) :: x(:,:)
+    integer             :: oldbase
+    oldbase = basis
+    if (any (basis == wv_CDV_list(:))) then
+    end if
+    basis = oldbase
+  end subroutine wave_1d
+  !-
+  subroutine mr_gp_mat (A)
+    real, intent(inout) :: A (:,:)
+    call wave_1d (A)
+  end subroutine mr_gp_mat
+end module gfcbug140