diff options
author | Tobias Burnus <burnus@net-b.de> | 2007-11-22 10:55:47 +0100 |
---|---|---|
committer | Tobias Burnus <burnus@gcc.gnu.org> | 2007-11-22 10:55:47 +0100 |
commit | 7861a5ce14376a46409d83eeebef942be4030fe4 (patch) | |
tree | 8a9a62e34f11f58333d3069ebae8246ca7489e01 /gcc/fortran | |
parent | ac605fd66dcaa3c39b41c94d0c00a00659c3e42e (diff) | |
download | gcc-7861a5ce14376a46409d83eeebef942be4030fe4.zip gcc-7861a5ce14376a46409d83eeebef942be4030fe4.tar.gz gcc-7861a5ce14376a46409d83eeebef942be4030fe4.tar.bz2 |
re PR fortran/34079 (Bind(C): Character argument/return value problems)
2007-11-22 Tobias Burnus <burnus@net-b.de>
PR fortran/34079
* trans-expr.c (gfc_conv_function_call): Do not append
string length arguments when calling bind(c) procedures.
* trans-decl.c (create_function_arglist): Do not append
string length arguments when declaring bind(c) procedures.
2007-11-22 Tobias Burnus <burnus@net-b.de>
PR fortran/34079
* gfortran.dg/bind_c_usage_10.f03: Remove .mod file afterwards.
* gfortran.dg/bind_c_usage_13.f03: New.
* gfortran.dg/bind_c_usage_14.f03: New.
From-SVN: r130346
Diffstat (limited to 'gcc/fortran')
-rw-r--r-- | gcc/fortran/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/fortran/trans-decl.c | 6 | ||||
-rw-r--r-- | gcc/fortran/trans-expr.c | 4 |
3 files changed, 14 insertions, 4 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 74e5df0..43f6229 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,11 @@ +2007-11-22 Tobias Burnus <burnus@net-b.de> + + PR fortran/34079 + * trans-expr.c (gfc_conv_function_call): Do not append + string length arguments when calling bind(c) procedures. + * trans-decl.c (create_function_arglist): Do not append + string length arguments when declaring bind(c) procedures. + 2007-11-21 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org> PR fortran/34083 diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c index 4b114df..3a38973 100644 --- a/gcc/fortran/trans-decl.c +++ b/gcc/fortran/trans-decl.c @@ -1535,8 +1535,10 @@ create_function_arglist (gfc_symbol * sym) typelist = TREE_CHAIN (typelist); } - /* Add the hidden string length parameters. */ - arglist = chainon (arglist, hidden_arglist); + /* Add the hidden string length parameters, unless the procedure + is bind(C). */ + if (!sym->attr.is_bind_c) + arglist = chainon (arglist, hidden_arglist); gcc_assert (hidden_typelist == NULL_TREE || TREE_VALUE (hidden_typelist) == void_type_node); diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c index c15de4b..6fc1e2c 100644 --- a/gcc/fortran/trans-expr.c +++ b/gcc/fortran/trans-expr.c @@ -2392,8 +2392,8 @@ gfc_conv_function_call (gfc_se * se, gfc_symbol * sym, } /* Character strings are passed as two parameters, a length and a - pointer. */ - if (parmse.string_length != NULL_TREE) + pointer - except for Bind(c) which only passes the pointer. */ + if (parmse.string_length != NULL_TREE && !sym->attr.is_bind_c) stringargs = gfc_chainon_list (stringargs, parmse.string_length); arglist = gfc_chainon_list (arglist, parmse.expr); |