Hi!

gfc_trans_omp_array_reduction_or_udr creates artificial intrinsics symbol
just for the purpose of expansion of array min/max reductions.
That is something we certainly don't want a -Wsurprising warning on.

Fixed thusly, bootstrapped/regtested on x86_64-linux and i686-linux,
committed to trunk.

2017-11-24  Jakub Jelinek  <ja...@redhat.com>

        PR fortran/81304
        * trans-openmp.c (gfc_trans_omp_array_reduction_or_udr): Set
        attr.implicit_type in intrinsic_sym to avoid undesirable warning.

        * testsuite/libgomp.fortran/pr81304.f90: New test.

--- gcc/fortran/trans-openmp.c.jj       2017-11-08 16:19:36.000000000 +0100
+++ gcc/fortran/trans-openmp.c  2017-11-24 13:41:41.995610897 +0100
@@ -1623,6 +1623,7 @@ gfc_trans_omp_array_reduction_or_udr (tr
       intrinsic_sym.attr.referenced = 1;
       intrinsic_sym.attr.intrinsic = 1;
       intrinsic_sym.attr.function = 1;
+      intrinsic_sym.attr.implicit_type = 1;
       intrinsic_sym.result = &intrinsic_sym;
       intrinsic_sym.declared_at = where;
 
--- libgomp/testsuite/libgomp.fortran/pr81304.f90.jj    2017-11-24 
13:50:39.668043753 +0100
+++ libgomp/testsuite/libgomp.fortran/pr81304.f90       2017-11-24 
13:50:11.000000000 +0100
@@ -0,0 +1,17 @@
+! PR fortran/81304
+! { dg-do run }
+! { dg-options "-Wsurprising" }
+
+program pr81304
+   integer :: i
+   real, dimension(1:3) :: a, b, c
+   a = 128
+   b = 0
+!$omp parallel do reduction(min: a) reduction(max: b) private (c)      ! { 
dg-bogus "Type specified for intrinsic function" }
+   do i = 1, 16
+     c = (/ i, i - 5, i + 5 /)
+     a = min (a, c)
+     b = max (b, c)
+   end do
+   if (any (a /= (/ 1, -4, 6 /)) .or. any (b /= (/ 16, 11, 21 /))) call abort
+end

        Jakub

Reply via email to