mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-02-15 04:49:30 +08:00
re PR fortran/29410 ([4.2 only] bug with TRANSFER() and -O2)
2006-10-30 Andrew Pinski <pinskia@gmail.com> PR fortran/29410 * trans-intrinsic.c (gfc_conv_intrinsic_array_transfer): Change over to create VIEW_CONVERT_EXPR instead of using an ADDR_EXPR, a cast and then an indirect reference 2006-10-30 Andrew Pinski <pinskia@gmail.com> PR Fortran/29410 * gfortran.fortran-torture/execute/transfer1.f90: New test. From-SVN: r118186
This commit is contained in:
parent
ff84991f99
commit
0e69739965
@ -1,3 +1,10 @@
|
||||
2006-10-30 Andrew Pinski <pinskia@gmail.com>
|
||||
|
||||
PR fortran/29410
|
||||
* trans-intrinsic.c (gfc_conv_intrinsic_array_transfer):
|
||||
Change over to create VIEW_CONVERT_EXPR instead of using an
|
||||
ADDR_EXPR, a cast and then an indirect reference
|
||||
|
||||
2006-10-29 Francois-Xavier Coudert <coudert@clipper.ens.fr>
|
||||
|
||||
* trans-intrinsic.c (gfc_conv_intrinsic_loc): Make LOC return a
|
||||
|
@ -2914,7 +2914,7 @@ gfc_conv_intrinsic_array_transfer (gfc_se * se, gfc_expr * expr)
|
||||
|
||||
|
||||
/* Scalar transfer statement.
|
||||
TRANSFER (source, mold) = *(typeof<mold> *)&source. */
|
||||
TRANSFER (source, mold) = VIEW_CONVERT_EXPR<typeof<mold> >source. */
|
||||
|
||||
static void
|
||||
gfc_conv_intrinsic_transfer (gfc_se * se, gfc_expr * expr)
|
||||
@ -2939,9 +2939,9 @@ gfc_conv_intrinsic_transfer (gfc_se * se, gfc_expr * expr)
|
||||
|
||||
arg = arg->next;
|
||||
type = gfc_typenode_for_spec (&expr->ts);
|
||||
ptr = convert (build_pointer_type (type), ptr);
|
||||
if (expr->ts.type == BT_CHARACTER)
|
||||
{
|
||||
ptr = convert (build_pointer_type (type), ptr);
|
||||
gfc_init_se (&argse, NULL);
|
||||
gfc_conv_expr (&argse, arg->expr);
|
||||
gfc_add_block_to_block (&se->pre, &argse.pre);
|
||||
@ -2951,7 +2951,8 @@ gfc_conv_intrinsic_transfer (gfc_se * se, gfc_expr * expr)
|
||||
}
|
||||
else
|
||||
{
|
||||
se->expr = build_fold_indirect_ref (ptr);
|
||||
tree tmp = build_fold_indirect_ref (ptr);
|
||||
se->expr = fold_build1 (VIEW_CONVERT_EXPR, type, tmp);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,3 +1,8 @@
|
||||
2006-10-30 Andrew Pinski <pinskia@gmail.com>
|
||||
|
||||
PR Fortran/29410
|
||||
* gfortran.fortran-torture/execute/transfer1.f90: New test.
|
||||
|
||||
2006-10-30 Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
* lib/target-supports.exp (check_function_available): Declare
|
||||
|
10
gcc/testsuite/gfortran.fortran-torture/execute/transfer1.f90
Normal file
10
gcc/testsuite/gfortran.fortran-torture/execute/transfer1.f90
Normal file
@ -0,0 +1,10 @@
|
||||
program chop
|
||||
integer ix, iy
|
||||
real x, y
|
||||
x = 1.
|
||||
y = x
|
||||
ix = transfer(x,ix)
|
||||
iy = transfer(y,iy)
|
||||
print '(2z20.8)', ix, iy
|
||||
if (ix /= iy) call abort
|
||||
end program chop
|
Loading…
Reference in New Issue
Block a user