diff options
author | Tobias Burnus <burnus@net-b.de> | 2011-10-14 17:09:21 +0200 |
---|---|---|
committer | Tobias Burnus <burnus@gcc.gnu.org> | 2011-10-14 17:09:21 +0200 |
commit | 85ff29389d2a4e9cae1efabb1acfb8c8927d7e11 (patch) | |
tree | f0572893ffbfdaa5ae96d940b4c171a86826ca21 /gcc/fortran/trans-expr.c | |
parent | 8c3532055ae44c448bd0bff8952f60ce68e2f178 (diff) | |
download | gcc-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.c | 10 |
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)); } |