diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 7b21c6e2079..903e9ab2505 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,8 @@ +2014-06-19 Tobias Burnus + + * trans-intrinsic.c (conv_co_minmaxsum): Fix argument + passing. + 2014-06-18 Tobias Burnus * gfortran.texi (OpenMP): Update refs to OpenMP 4.0. diff --git a/gcc/fortran/trans-intrinsic.c b/gcc/fortran/trans-intrinsic.c index 52a2788080e..548fd9fbc76 100644 --- a/gcc/fortran/trans-intrinsic.c +++ b/gcc/fortran/trans-intrinsic.c @@ -8300,13 +8300,11 @@ conv_co_minmaxsum (gfc_code *code) gcc_unreachable (); if (code->resolved_isym->id == GFC_ISYM_CO_SUM) - fndecl = build_call_expr_loc (input_location, fndecl, 6, array, - null_pointer_node, image_index, stat, errmsg, - errmsg_len); + fndecl = build_call_expr_loc (input_location, fndecl, 5, array, + image_index, stat, errmsg, errmsg_len); else - fndecl = build_call_expr_loc (input_location, fndecl, 7, array, - null_pointer_node, image_index, stat, errmsg, - strlen, errmsg_len); + fndecl = build_call_expr_loc (input_location, fndecl, 6, array, image_index, + stat, errmsg, strlen, errmsg_len); gfc_add_expr_to_block (&block, fndecl); gfc_add_block_to_block (&block, &post_block); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8a142031449..2d045216615 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,9 +1,14 @@ +2014-06-19 Tobias Burnus + + * gfortran.dg/coarray/collectives_2.f90: Extend + and make valid. + 2014-06-18 Tom de Vries * gcc.target/aarch64/fuse-caller-save.c: New test. 2014-06-18 Radovan Obradovic - Tom de Vries + Tom de Vries * gcc.target/arm/fuse-caller-save.c: New test. diff --git a/gcc/testsuite/gfortran.dg/coarray/collectives_2.f90 b/gcc/testsuite/gfortran.dg/coarray/collectives_2.f90 index a2f5939160c..3ff9383b8eb 100644 --- a/gcc/testsuite/gfortran.dg/coarray/collectives_2.f90 +++ b/gcc/testsuite/gfortran.dg/coarray/collectives_2.f90 @@ -7,7 +7,7 @@ program test intrinsic co_max intrinsic co_min intrinsic co_sum - integer :: val(3) + integer :: val(3), tmp_val(3) integer :: vec(3) vec = [2,3,1] if (this_image() == 1) then @@ -21,13 +21,24 @@ program test else val(3) = 101 endif + tmp_val = val call test_min + val = tmp_val call test_max + val = tmp_val call test_sum contains subroutine test_max - call co_max (val(vec)) - !write(*,*) "Maximal value", val + integer :: tmp + call co_max (val(::2)) + if (num_images() > 1) then + if (any (val /= [42, this_image(), 101])) call abort() + else + if (any (val /= [42, this_image(), -55])) call abort() + endif + + val = tmp_val + call co_max (val(:)) if (num_images() > 1) then if (any (val /= [42, num_images(), 101])) call abort() else @@ -40,20 +51,26 @@ contains if (this_image() == num_images()) then !write(*,*) "Minimal value", val if (num_images() > 1) then - if (any (val /= [-99, num_images(), -55])) call abort() + if (any (val /= [-99, 1, -55])) call abort() else - if (any (val /= [42, num_images(), -55])) call abort() + if (any (val /= [42, 1, -55])) call abort() endif + else + if (any (val /= tmp_val)) call abort() endif end subroutine test_min subroutine test_sum integer :: n - call co_sum (val, result_image=1) + n = 88 + call co_sum (val, result_image=1, stat=n) + if (n /= 0) call abort() if (this_image() == 1) then n = num_images() !write(*,*) "The sum is ", val if (any (val /= [42 + (n-1)*(-99), (n**2 + n)/2, -55+(n-1)*101])) call abort() + else + if (any (val /= tmp_val)) call abort() end if end subroutine test_sum end program test diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index 0a89a989635..ec8928df04e 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,8 @@ +2014-06-19 Tobias Burnus + + * caf/single.c (_gfortran_caf_co_sum, _gfortran_caf_co_max, + _gfortran_caf_co_min): Fix stat setting. + 2014-06-17 Tobias Burnus * caf/libcaf.h (gfc_descriptor_t): New typedef. diff --git a/libgfortran/caf/single.c b/libgfortran/caf/single.c index cf1d420758a..abb0a1fb9a2 100644 --- a/libgfortran/caf/single.c +++ b/libgfortran/caf/single.c @@ -211,7 +211,7 @@ _gfortran_caf_co_sum (gfc_descriptor_t *a __attribute__ ((unused)), int errmsg_len __attribute__ ((unused))) { if (stat) - stat = 0; + *stat = 0; } void @@ -222,7 +222,7 @@ _gfortran_caf_co_min (gfc_descriptor_t *a __attribute__ ((unused)), int errmsg_len __attribute__ ((unused))) { if (stat) - stat = 0; + *stat = 0; } void @@ -233,7 +233,7 @@ _gfortran_caf_co_max (gfc_descriptor_t *a __attribute__ ((unused)), int errmsg_len __attribute__ ((unused))) { if (stat) - stat = 0; + *stat = 0; } void