diff options
author | Jakub Jelinek <jakub@redhat.com> | 2010-08-17 20:06:18 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2010-08-17 20:06:18 +0200 |
commit | 35d3d688fc4b8adde86a554a5061f2a7d54df6a2 (patch) | |
tree | 54aa23c03c4d5c54807cefbeccd9c5fbb14f5ce2 | |
parent | 1c111d0a5874d378f3e80c057255b2edb1bf0836 (diff) | |
download | gcc-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/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/fortran/trans-decl.c | 2 | ||||
-rw-r--r-- | gcc/fortran/trans-intrinsic.c | 2 | ||||
-rw-r--r-- | gcc/fortran/trans-types.c | 4 |
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; |