From 35d3d688fc4b8adde86a554a5061f2a7d54df6a2 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Tue, 17 Aug 2010 20:06:18 +0200 Subject: [PATCH] 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 --- gcc/fortran/ChangeLog | 9 +++++++++ gcc/fortran/trans-decl.c | 2 +- gcc/fortran/trans-intrinsic.c | 2 +- gcc/fortran/trans-types.c | 4 +++- 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 77560d10ae4..67bcf5ab80c 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,12 @@ +2010-08-17 Jakub Jelinek + + 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 PR fortran/38936 diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c index 4fb0251054d..1abb0596e7e 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 589e9df7a1d..aa0db6375e8 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 892a73ebd80..a08a7ea357b 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; -- 2.30.2