aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2010-08-17 20:06:18 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2010-08-17 20:06:18 +0200
commit35d3d688fc4b8adde86a554a5061f2a7d54df6a2 (patch)
tree54aa23c03c4d5c54807cefbeccd9c5fbb14f5ce2
parent1c111d0a5874d378f3e80c057255b2edb1bf0836 (diff)
downloadgcc-35d3d688fc4b8adde86a554a5061f2a7d54df6a2.zip
gcc-35d3d688fc4b8adde86a554a5061f2a7d54df6a2.tar.gz
gcc-35d3d688fc4b8adde86a554a5061f2a7d54df6a2.tar.bz2
re PR fortran/45304 (Functions/subroutines without arguments always treated like varargs)
PR fortran/45304 * trans-decl.c (build_library_function_decl_1): Chain on void_list_node instead of creating a new TREE_LIST. * trans-intrinsic.c (gfc_get_intrinsic_lib_fndecl): Likewise. * trans-types.c (gfc_get_function_type): Likewise. Set typelist to void_list_node for the main program. From-SVN: r163311
-rw-r--r--gcc/fortran/ChangeLog9
-rw-r--r--gcc/fortran/trans-decl.c2
-rw-r--r--gcc/fortran/trans-intrinsic.c2
-rw-r--r--gcc/fortran/trans-types.c4
4 files changed, 14 insertions, 3 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 77560d1..67bcf5a 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,12 @@
+2010-08-17 Jakub Jelinek <jakub@redhat.com>
+
+ PR fortran/45304
+ * trans-decl.c (build_library_function_decl_1): Chain on
+ void_list_node instead of creating a new TREE_LIST.
+ * trans-intrinsic.c (gfc_get_intrinsic_lib_fndecl): Likewise.
+ * trans-types.c (gfc_get_function_type): Likewise. Set
+ typelist to void_list_node for the main program.
+
2010-08-17 Daniel Kraft <d@domob.eu>
PR fortran/38936
diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c
index 4fb0251..1abb059 100644
--- a/gcc/fortran/trans-decl.c
+++ b/gcc/fortran/trans-decl.c
@@ -2353,7 +2353,7 @@ build_library_function_decl_1 (tree name, const char *spec,
if (nargs >= 0)
{
/* Terminate the list. */
- arglist = gfc_chainon_list (arglist, void_type_node);
+ arglist = chainon (arglist, void_list_node);
}
/* Build the function type and decl. */
diff --git a/gcc/fortran/trans-intrinsic.c b/gcc/fortran/trans-intrinsic.c
index 589e9df..aa0db63 100644
--- a/gcc/fortran/trans-intrinsic.c
+++ b/gcc/fortran/trans-intrinsic.c
@@ -684,7 +684,7 @@ gfc_get_intrinsic_lib_fndecl (gfc_intrinsic_map_t * m, gfc_expr * expr)
type = gfc_typenode_for_spec (&actual->expr->ts);
argtypes = gfc_chainon_list (argtypes, type);
}
- argtypes = gfc_chainon_list (argtypes, void_type_node);
+ argtypes = chainon (argtypes, void_list_node);
type = build_function_type (gfc_typenode_for_spec (ts), argtypes);
fndecl = build_decl (input_location,
FUNCTION_DECL, get_identifier (name), type);
diff --git a/gcc/fortran/trans-types.c b/gcc/fortran/trans-types.c
index 892a73e..a08a7ea 100644
--- a/gcc/fortran/trans-types.c
+++ b/gcc/fortran/trans-types.c
@@ -2357,7 +2357,9 @@ gfc_get_function_type (gfc_symbol * sym)
typelist = gfc_chainon_list (typelist, gfc_charlen_type_node);
if (typelist)
- typelist = gfc_chainon_list (typelist, void_type_node);
+ typelist = chainon (typelist, void_list_node);
+ else if (sym->attr.is_main_program)
+ typelist = void_list_node;
if (alternate_return)
type = integer_type_node;