aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlessandro Fanfarillo <fanfarillo.gcc@gmail.com>2015-07-17 06:18:44 -0600
committerMikael Morin <mikael@gcc.gnu.org>2015-07-17 12:18:44 +0000
commit996d027a36c646fbb0098e96c83dbb4c0ea5133d (patch)
tree203dea28d80d730acea563713ae5db2464853755
parentc92f5b137e967a3ffd1ad0ce80a74c5a12e97fe3 (diff)
downloadgcc-996d027a36c646fbb0098e96c83dbb4c0ea5133d.zip
gcc-996d027a36c646fbb0098e96c83dbb4c0ea5133d.tar.gz
gcc-996d027a36c646fbb0098e96c83dbb4c0ea5133d.tar.bz2
Fix fortran double address operator with co_reduce
gcc/fortran/ 2015-07-17 Alessandro Fanfarillo <fanfarillo.gcc@gmail.com> * trans-intrinsic.c (conv_co_collective): Remove redundant address operator in the generated code. gcc/testsuite/ 2015-07-17 Alessandro Fanfarillo <fanfarillo.gcc@gmail.com> * gfortran.dg/co_reduce_1.f90: New file. From-SVN: r225930
-rw-r--r--gcc/fortran/ChangeLog5
-rw-r--r--gcc/fortran/trans-intrinsic.c2
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gfortran.dg/co_reduce_1.f9033
4 files changed, 43 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 33b8cbb..d082f0b 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,8 @@
+2015-07-17 Alessandro Fanfarillo <fanfarillo.gcc@gmail.com>
+
+ * trans-intrinsic.c (conv_co_collective): Remove redundant address
+ operator in the generated code.
+
2015-07-17 Andre Vehreschild <vehre@gcc.gnu.org>
PR fortran/66035
diff --git a/gcc/fortran/trans-intrinsic.c b/gcc/fortran/trans-intrinsic.c
index 66bc72a..967a741 100644
--- a/gcc/fortran/trans-intrinsic.c
+++ b/gcc/fortran/trans-intrinsic.c
@@ -8804,7 +8804,7 @@ conv_co_collective (gfc_code *code)
}
opr_flags = build_int_cst (integer_type_node, opr_flag_int);
gfc_conv_expr (&argse, opr_expr);
- opr = gfc_build_addr_expr (NULL_TREE, argse.expr);
+ opr = argse.expr;
fndecl = build_call_expr_loc (input_location, fndecl, 8, array, opr, opr_flags,
image_index, stat, errmsg, strlen, errmsg_len);
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 57b8e54..5462c1f 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2015-07-17 Alessandro Fanfarillo <fanfarillo.gcc@gmail.com>
+
+ * gfortran.dg/co_reduce_1.f90: New file.
+
2015-07-17 H.J. Lu <hongjiu.lu@intel.com>
PR target/66824
diff --git a/gcc/testsuite/gfortran.dg/co_reduce_1.f90 b/gcc/testsuite/gfortran.dg/co_reduce_1.f90
new file mode 100644
index 0000000..1d3e89f
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/co_reduce_1.f90
@@ -0,0 +1,33 @@
+! { dg-do compile }
+! { dg-additional-options "-fdump-tree-original -fcoarray=lib" }
+!
+! Check that we don't take twice the address of procedure simple_reduction
+! in the generated code.
+!
+! Contributed by Alessandro Fanfarillo <fanfarillo.gcc@gmail.com>
+
+program simple_reduce
+ implicit none
+
+ integer :: me
+
+ me = this_image()
+
+ sync all
+
+ call co_reduce(me,simple_reduction)
+
+ write(*,*) this_image(),me
+
+contains
+
+ pure function simple_reduction(a,b)
+ integer,intent(in) :: a,b
+ integer :: simple_reduction
+
+ simple_reduction = a * b
+ end function simple_reduction
+
+end program simple_reduce
+
+! { dg-final { scan-tree-dump "_gfortran_caf_co_reduce \\(&desc\\.\\d+,\\s*simple_reduction," "original" } }