aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran
diff options
context:
space:
mode:
authorTobias Burnus <burnus@net-b.de>2007-11-22 10:55:47 +0100
committerTobias Burnus <burnus@gcc.gnu.org>2007-11-22 10:55:47 +0100
commit7861a5ce14376a46409d83eeebef942be4030fe4 (patch)
tree8a9a62e34f11f58333d3069ebae8246ca7489e01 /gcc/fortran
parentac605fd66dcaa3c39b41c94d0c00a00659c3e42e (diff)
downloadgcc-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/ChangeLog8
-rw-r--r--gcc/fortran/trans-decl.c6
-rw-r--r--gcc/fortran/trans-expr.c4
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);