aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/trans-expr.c
diff options
context:
space:
mode:
authorTobias Burnus <burnus@net-b.de>2011-10-14 17:09:21 +0200
committerTobias Burnus <burnus@gcc.gnu.org>2011-10-14 17:09:21 +0200
commit85ff29389d2a4e9cae1efabb1acfb8c8927d7e11 (patch)
treef0572893ffbfdaa5ae96d940b4c171a86826ca21 /gcc/fortran/trans-expr.c
parent8c3532055ae44c448bd0bff8952f60ce68e2f178 (diff)
downloadgcc-85ff29389d2a4e9cae1efabb1acfb8c8927d7e11.zip
gcc-85ff29389d2a4e9cae1efabb1acfb8c8927d7e11.tar.gz
gcc-85ff29389d2a4e9cae1efabb1acfb8c8927d7e11.tar.bz2
re PR fortran/50718 (ICE (fold_convert) with -fcheck=pointer)
2011-10-14 Tobias Burnus <burnus@net-b.de> PR fortran/50718 * trans-expr.c (gfc_conv_procedure_call): Fix -fcheck=pointer for dummy arguments with VALUE attribute. 2011-10-14 Tobias Burnus <burnus@net-b.de> PR fortran/50718 * gfortran.dg/pointer_check_11.f90: New. * gfortran.dg/pointer_check_12.f90: New. From-SVN: r179988
Diffstat (limited to 'gcc/fortran/trans-expr.c')
-rw-r--r--gcc/fortran/trans-expr.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c
index ca0523f..09b98d0 100644
--- a/gcc/fortran/trans-expr.c
+++ b/gcc/fortran/trans-expr.c
@@ -3357,10 +3357,16 @@ gfc_conv_procedure_call (gfc_se * se, gfc_symbol * sym,
else
goto end_pointer_check;
+ tmp = parmse.expr;
+
+ /* If the argument is passed by value, we need to strip the
+ INDIRECT_REF. */
+ if (!POINTER_TYPE_P (TREE_TYPE (parmse.expr)))
+ tmp = gfc_build_addr_expr (NULL_TREE, tmp);
cond = fold_build2_loc (input_location, EQ_EXPR,
- boolean_type_node, parmse.expr,
- fold_convert (TREE_TYPE (parmse.expr),
+ boolean_type_node, tmp,
+ fold_convert (TREE_TYPE (tmp),
null_pointer_node));
}