diff options
author | Francois-Xavier Coudert <coudert@clipper.ens.fr> | 2006-06-18 19:36:47 +0200 |
---|---|---|
committer | François-Xavier Coudert <fxcoudert@gcc.gnu.org> | 2006-06-18 17:36:47 +0000 |
commit | 98efaf34b2eb96a00b58966b32a7b3081150f1c5 (patch) | |
tree | 2cbdd35fbaca8b936aaae208218a266895056c58 /gcc/fortran/trans-intrinsic.c | |
parent | a9c46998892e1750613e81684b9c49ed42d4d841 (diff) | |
download | gcc-98efaf34b2eb96a00b58966b32a7b3081150f1c5.zip gcc-98efaf34b2eb96a00b58966b32a7b3081150f1c5.tar.gz gcc-98efaf34b2eb96a00b58966b32a7b3081150f1c5.tar.bz2 |
re PR fortran/26801 (-fbounds-check generates segfault)
PR fortran/26801
* trans-intrinsic.c (gfc_conv_associated): Use pre and post blocks
of the scalarization expression.
* gfortran.dg/associated_4.f90: New test.
From-SVN: r114757
Diffstat (limited to 'gcc/fortran/trans-intrinsic.c')
-rw-r--r-- | gcc/fortran/trans-intrinsic.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/gcc/fortran/trans-intrinsic.c b/gcc/fortran/trans-intrinsic.c index 9d6a0b74..b4863a0 100644 --- a/gcc/fortran/trans-intrinsic.c +++ b/gcc/fortran/trans-intrinsic.c @@ -2840,6 +2840,8 @@ gfc_conv_associated (gfc_se *se, gfc_expr *expr) gfc_conv_expr_lhs (&arg1se, arg1->expr); tmp2 = gfc_conv_descriptor_data_get (arg1se.expr); } + gfc_add_block_to_block (&se->pre, &arg1se.pre); + gfc_add_block_to_block (&se->post, &arg1se.post); tmp = build2 (NE_EXPR, boolean_type_node, tmp2, fold_convert (TREE_TYPE (tmp2), null_pointer_node)); se->expr = tmp; @@ -2863,6 +2865,8 @@ gfc_conv_associated (gfc_se *se, gfc_expr *expr) gfc_conv_expr (&arg1se, arg1->expr); arg2se.want_pointer = 1; gfc_conv_expr (&arg2se, arg2->expr); + gfc_add_block_to_block (&se->pre, &arg1se.pre); + gfc_add_block_to_block (&se->post, &arg1se.post); tmp = build2 (EQ_EXPR, boolean_type_node, arg1se.expr, arg2se.expr); se->expr = tmp; } |