re PR fortran/15327 (ICE when using MERGE on strings)
fortran/ PR fortran/15327 * trans-intrinsic.c (gfc_conv_intrinsic_merge): Do the right thing for strings. testsuite/ PR fortran/15327 * gfortran.dg/merge_char_1.f90: New test. From-SVN: r86940
This commit is contained in:
parent
40219f9650
commit
c3d0559da5
@ -1,3 +1,9 @@
|
||||
2004-09-01 Tobias Schlueter <tobias.schlueter@physik.uni-muenchen.de>
|
||||
|
||||
PR fortran/15327
|
||||
* trans-intrinsic.c (gfc_conv_intrinsic_merge): Do the right thing for
|
||||
strings.
|
||||
|
||||
2004-09-01 Tobias Schlueter <tobias.schlueter@physik.uni-muenchen.de>
|
||||
|
||||
PR fortran/16400
|
||||
|
@ -1998,14 +1998,30 @@ gfc_conv_intrinsic_merge (gfc_se * se, gfc_expr * expr)
|
||||
tree fsource;
|
||||
tree mask;
|
||||
tree type;
|
||||
tree len;
|
||||
|
||||
arg = gfc_conv_intrinsic_function_args (se, expr);
|
||||
tsource = TREE_VALUE (arg);
|
||||
arg = TREE_CHAIN (arg);
|
||||
fsource = TREE_VALUE (arg);
|
||||
arg = TREE_CHAIN (arg);
|
||||
mask = TREE_VALUE (arg);
|
||||
if (expr->ts.type != BT_CHARACTER)
|
||||
{
|
||||
tsource = TREE_VALUE (arg);
|
||||
arg = TREE_CHAIN (arg);
|
||||
fsource = TREE_VALUE (arg);
|
||||
mask = TREE_VALUE (TREE_CHAIN (arg));
|
||||
}
|
||||
else
|
||||
{
|
||||
/* We do the same as in the non-character case, but the argument
|
||||
list is different because of the string length arguments. We
|
||||
also have to set the string length for the result. */
|
||||
len = TREE_VALUE (arg);
|
||||
arg = TREE_CHAIN (arg);
|
||||
tsource = TREE_VALUE (arg);
|
||||
arg = TREE_CHAIN (TREE_CHAIN (arg));
|
||||
fsource = TREE_VALUE (arg);
|
||||
mask = TREE_VALUE (TREE_CHAIN (arg));
|
||||
|
||||
se->string_length = len;
|
||||
}
|
||||
type = TREE_TYPE (tsource);
|
||||
se->expr = fold (build3 (COND_EXPR, type, mask, tsource, fsource));
|
||||
}
|
||||
|
@ -1,3 +1,8 @@
|
||||
2004-09-01 Tobias Schlueter <tobias.schlueter@physik.uni-muenchen.de>
|
||||
|
||||
PR fortran/15327
|
||||
* gfortran.dg/merge_char_1.f90: New test.
|
||||
|
||||
2004-09-01 Tobias Schlueter <tobias.schlueter@physik.uni-muenchen.de>
|
||||
|
||||
PR fortran/16404
|
||||
|
7
gcc/testsuite/gfortran.dg/merge_char_1.f90
Normal file
7
gcc/testsuite/gfortran.dg/merge_char_1.f90
Normal file
@ -0,0 +1,7 @@
|
||||
! { dg-do run }
|
||||
! PR 15327
|
||||
! The merge intrinsic didn't work for strings
|
||||
character*2 :: c(2)
|
||||
c = merge( (/ "AA", "BB" /), (/ "CC", "DD" /), (/ .TRUE., .FALSE. /) )
|
||||
if (c(1).ne."AA" .or. c(2).ne."DD") call abort ()
|
||||
end
|
Loading…
Reference in New Issue
Block a user