diff options
author | mikael <mikael@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-02-12 15:46:14 +0000 |
---|---|---|
committer | mikael <mikael@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-02-12 15:46:14 +0000 |
commit | 14957629ce851d15710486d4a0bd02a74e13df03 (patch) | |
tree | c1cb93e2a76a420c680b028bbe93cbcd49005b9b /gcc/fortran/trans-stmt.c | |
parent | ff32eb637977f436f83fd2284bc7894f3f76497b (diff) | |
download | gcc-14957629ce851d15710486d4a0bd02a74e13df03.tar.gz |
gcc/fortran/
PR fortran/50981
* trans-stmt.c (gfc_get_proc_ifc_for_call): New function.
(gfc_trans_call): Use gfc_get_proc_ifc_for_call.
gcc/testsuite/
PR fortran/50981
* gfortran.dg/elemental_optional_args_5.f03: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@184142 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/fortran/trans-stmt.c')
-rw-r--r-- | gcc/fortran/trans-stmt.c | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/gcc/fortran/trans-stmt.c b/gcc/fortran/trans-stmt.c index bad0459d3e1..bb3a89084e0 100644 --- a/gcc/fortran/trans-stmt.c +++ b/gcc/fortran/trans-stmt.c @@ -348,6 +348,27 @@ gfc_conv_elemental_dependencies (gfc_se * se, gfc_se * loopse, } +/* Get the interface symbol for the procedure corresponding to the given call. + We can't get the procedure symbol directly as we have to handle the case + of (deferred) type-bound procedures. */ + +static gfc_symbol * +get_proc_ifc_for_call (gfc_code *c) +{ + gfc_symbol *sym; + + gcc_assert (c->op == EXEC_ASSIGN_CALL || c->op == EXEC_CALL); + + sym = gfc_get_proc_ifc_for_expr (c->expr1); + + /* Fall back/last resort try. */ + if (sym == NULL) + sym = c->resolved_sym; + + return sym; +} + + /* Translate the CALL statement. Builds a call to an F95 subroutine. */ tree @@ -372,7 +393,7 @@ gfc_trans_call (gfc_code * code, bool dependency_check, ss = gfc_ss_terminator; if (code->resolved_sym->attr.elemental) ss = gfc_walk_elemental_function_args (ss, code->ext.actual, - gfc_get_proc_ifc_for_expr (code->expr1), + get_proc_ifc_for_call (code), GFC_SS_REFERENCE); /* Is not an elemental subroutine call with array valued arguments. */ |