re PR fortran/27662 ([4.1 only]: Transpose doesn't work on function return)
gcc/fortran/ 2006-05-19 H.J. Lu <hongjiu.lu@intel.com> PR fortran/27662 * trans-array.c (gfc_conv_expr_descriptor): Don't zere the first stride to indicate a temporary. * trans-expr.c (gfc_conv_function_call): Likewise. gcc/testsuite/ 2006-05-19 H.J. Lu <hongjiu.lu@intel.com> PR fortran/27662 * gfortran.dg/temporary_1.f90: New file. From-SVN: r113922
This commit is contained in:
parent
ab9ddafbc0
commit
a635db3deb
@ -1,3 +1,10 @@
|
||||
2006-05-19 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR fortran/27662
|
||||
* trans-array.c (gfc_conv_expr_descriptor): Don't zere the
|
||||
first stride to indicate a temporary.
|
||||
* trans-expr.c (gfc_conv_function_call): Likewise.
|
||||
|
||||
2006-05-18 Francois-Xavier Coudert <coudert@clipper.ens.fr>
|
||||
Feng Wang <fengwang@nudt.edu.cn>
|
||||
|
||||
|
@ -4108,10 +4108,7 @@ gfc_conv_expr_descriptor (gfc_se * se, gfc_expr * expr, gfc_ss * ss)
|
||||
/* Finish the copying loops. */
|
||||
gfc_trans_scalarizing_loops (&loop, &block);
|
||||
|
||||
/* Set the first stride component to zero to indicate a temporary. */
|
||||
desc = loop.temp_ss->data.info.descriptor;
|
||||
tmp = gfc_conv_descriptor_stride (desc, gfc_rank_cst[0]);
|
||||
gfc_add_modify_expr (&loop.pre, tmp, gfc_index_zero_node);
|
||||
|
||||
gcc_assert (is_gimple_lvalue (desc));
|
||||
}
|
||||
|
@ -2038,11 +2038,6 @@ gfc_conv_function_call (gfc_se * se, gfc_symbol * sym,
|
||||
gfc_trans_create_temp_array (&se->pre, &se->post, se->loop, info, tmp,
|
||||
false, !sym->attr.pointer, callee_alloc);
|
||||
|
||||
/* Zero the first stride to indicate a temporary. */
|
||||
tmp = gfc_conv_descriptor_stride (info->descriptor, gfc_rank_cst[0]);
|
||||
gfc_add_modify_expr (&se->pre, tmp,
|
||||
convert (TREE_TYPE (tmp), integer_zero_node));
|
||||
|
||||
/* Pass the temporary as the first argument. */
|
||||
tmp = info->descriptor;
|
||||
tmp = build_fold_addr_expr (tmp);
|
||||
|
@ -1,3 +1,8 @@
|
||||
2006-05-19 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR fortran/27662
|
||||
* gfortran.dg/temporary_1.f90: New file.
|
||||
|
||||
2006-05-19 Andreas Schwab <schwab@suse.de>
|
||||
|
||||
* g++.dg/other/unused1.C: Also match "stringz".
|
||||
|
28
gcc/testsuite/gfortran.dg/temporary_1.f90
Normal file
28
gcc/testsuite/gfortran.dg/temporary_1.f90
Normal file
@ -0,0 +1,28 @@
|
||||
! { dg-do run }
|
||||
! PR 27662. Don't zero the first stride to indicate a temporary. It
|
||||
! may be used later.
|
||||
program pr27662
|
||||
implicit none
|
||||
real(kind=kind(1.0d0)), dimension (2, 2):: x, y, z;
|
||||
integer i, j
|
||||
x(1,1) = 1.d0
|
||||
x(2,1) = 0.d0
|
||||
x(1,2) = 0.d0
|
||||
x(2,2) = 1.d0
|
||||
z = matmul (x, transpose (test ()))
|
||||
do i = 1, size (x, 1)
|
||||
do j = 1, size (x, 2)
|
||||
if (x (i, j) .ne. z (i, j)) call abort ()
|
||||
end do
|
||||
end do
|
||||
close (10)
|
||||
|
||||
contains
|
||||
function test () result (res)
|
||||
real(kind=kind(1.0d0)), dimension(2,2) :: res
|
||||
res(1,1) = 1.d0
|
||||
res(2,1) = 0.d0
|
||||
res(1,2) = 0.d0
|
||||
res(2,2) = 1.d0
|
||||
end function
|
||||
end
|
Loading…
Reference in New Issue
Block a user