aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobias Burnus <burnus@net-b.de>2009-07-29 16:44:51 +0200
committerTobias Burnus <burnus@gcc.gnu.org>2009-07-29 16:44:51 +0200
commit33215bb37f598adbbde2a90e301d37165072dcc2 (patch)
treeb9e48641fe11527027e1e18678f511de2ba7d7c0
parent50fc913551ce9e72ca3f5352c727ce9f87b17159 (diff)
downloadgcc-33215bb37f598adbbde2a90e301d37165072dcc2.zip
gcc-33215bb37f598adbbde2a90e301d37165072dcc2.tar.gz
gcc-33215bb37f598adbbde2a90e301d37165072dcc2.tar.bz2
re PR fortran/40898 (STDCALL mangling problem for strings @8 instead of @4)
2009-07-29 Tobias Burnus <burnus@net-b.de> PR fortran/40898 * trans-types.c (gfc_get_function_type): Do not add hidden string-length argument for BIND(C) procedures. * trans-decl.c (create_function_arglist): Skip over nonexisting string-length arguments for BIND(C) procedures. From-SVN: r150216
-rw-r--r--gcc/fortran/ChangeLog8
-rw-r--r--gcc/fortran/trans-decl.c3
-rw-r--r--gcc/fortran/trans-types.c2
3 files changed, 11 insertions, 2 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 623c601..f89a8af 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,11 @@
+2009-07-29 Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/40898
+ * trans-types.c (gfc_get_function_type): Do not add hidden
+ string-length argument for BIND(C) procedures.
+ * trans-decl.c (create_function_arglist): Skip over nonexisting
+ string-length arguments for BIND(C) procedures.
+
2009-07-28 Jakub Jelinek <jakub@redhat.com>
PR fortran/40878
diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c
index 65a6ac5..783c8f8 100644
--- a/gcc/fortran/trans-decl.c
+++ b/gcc/fortran/trans-decl.c
@@ -1724,7 +1724,8 @@ create_function_arglist (gfc_symbol * sym)
type = TREE_VALUE (typelist);
- if (f->sym->ts.type == BT_CHARACTER)
+ if (f->sym->ts.type == BT_CHARACTER
+ && (!sym->attr.is_bind_c || sym->attr.entry_master))
{
tree len_type = TREE_VALUE (hidden_typelist);
tree length = NULL_TREE;
diff --git a/gcc/fortran/trans-types.c b/gcc/fortran/trans-types.c
index 77b8b9c..7b84236 100644
--- a/gcc/fortran/trans-types.c
+++ b/gcc/fortran/trans-types.c
@@ -2249,7 +2249,7 @@ gfc_get_function_type (gfc_symbol * sym)
Contained procedures could pass by value as these are never
used without an explicit interface, and cannot be passed as
actual parameters for a dummy procedure. */
- if (arg->ts.type == BT_CHARACTER)
+ if (arg->ts.type == BT_CHARACTER && !sym->attr.is_bind_c)
nstr++;
typelist = gfc_chainon_list (typelist, type);
}