aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/trans-expr.c
diff options
context:
space:
mode:
authorJerry DeLisle <jvdelisle@gcc.gnu.org>2008-01-06 18:19:06 +0000
committerJerry DeLisle <jvdelisle@gcc.gnu.org>2008-01-06 18:19:06 +0000
commit9b09c4dec4d39938f5b85e20364fd4697fafc91c (patch)
tree217699e01c2360cf25662d7568e4deeecdf50f2e /gcc/fortran/trans-expr.c
parent346ecba81ddd1a8555ca5704cbc484144e71f860 (diff)
downloadgcc-9b09c4dec4d39938f5b85e20364fd4697fafc91c.zip
gcc-9b09c4dec4d39938f5b85e20364fd4697fafc91c.tar.gz
gcc-9b09c4dec4d39938f5b85e20364fd4697fafc91c.tar.bz2
re PR fortran/34387 (FAIL: gfortran.dg/optional_dim_2.f90: FE vs library argument missmatch)
2008-01-06 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR fortran/34387 * trans-expr.c (gfc_conv_missing_dummy): Use a temporary to type convert the dummy variable expression, test for NULL, and pass the variable address to the called function. From-SVN: r131356
Diffstat (limited to 'gcc/fortran/trans-expr.c')
-rw-r--r--gcc/fortran/trans-expr.c22
1 files changed, 14 insertions, 8 deletions
diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c
index 53cd7e6..65c65e3 100644
--- a/gcc/fortran/trans-expr.c
+++ b/gcc/fortran/trans-expr.c
@@ -154,18 +154,24 @@ gfc_conv_missing_dummy (gfc_se * se, gfc_expr * arg, gfc_typespec ts, int kind)
present = gfc_conv_expr_present (arg->symtree->n.sym);
- tmp = build3 (COND_EXPR, TREE_TYPE (se->expr), present, se->expr,
- fold_convert (TREE_TYPE (se->expr), integer_zero_node));
- tmp = gfc_evaluate_now (tmp, &se->pre);
-
if (kind > 0)
{
+ /* Create a temporary and convert it to the correct type. */
tmp = gfc_get_int_type (kind);
- tmp = fold_convert (tmp, se->expr);
- tmp = gfc_evaluate_now (tmp, &se->pre);
+ tmp = fold_convert (tmp, build_fold_indirect_ref (se->expr));
+
+ /* Test for a NULL value. */
+ tmp = build3 (COND_EXPR, TREE_TYPE (tmp), present, tmp, integer_one_node);
+ tmp = gfc_evaluate_now (tmp, &se->pre);
+ se->expr = build_fold_addr_expr (tmp);
+ }
+ else
+ {
+ tmp = build3 (COND_EXPR, TREE_TYPE (se->expr), present, se->expr,
+ fold_convert (TREE_TYPE (se->expr), integer_zero_node));
+ tmp = gfc_evaluate_now (tmp, &se->pre);
+ se->expr = tmp;
}
-
- se->expr = tmp;
if (ts.type == BT_CHARACTER)
{