diff options
author | Nathan Froyd <froydnj@codesourcery.com> | 2011-05-04 13:44:48 +0000 |
---|---|---|
committer | Nathan Froyd <froydnj@gcc.gnu.org> | 2011-05-04 13:44:48 +0000 |
commit | 6c32445bf59d1484a5b6a3aa0d99916ede70b4b1 (patch) | |
tree | 59050dadf44d73f3b2ea442fc54f6fb6a9c2fdf3 /gcc/tree.c | |
parent | df09d1d51c9d0a5e8df630870b51dd96bcdc2325 (diff) | |
download | gcc-6c32445bf59d1484a5b6a3aa0d99916ede70b4b1.zip gcc-6c32445bf59d1484a5b6a3aa0d99916ede70b4b1.tar.gz gcc-6c32445bf59d1484a5b6a3aa0d99916ede70b4b1.tar.bz2 |
tree.h (build_function_type_array): Declare.
gcc/
* tree.h (build_function_type_array): Declare.
(build_varargs_function_type_array): Declare.
(build_function_type_vec, build_varargs_function_type_vec): Define.
* tree.c (build_function_type_array_1): New function.
(build_function_type_array): New function.
(build_varargs_function_type_array): New function.
gcc/fortran/
* trans-decl.c (build_library_function_decl_1): Call
build_function_type_vec. Adjust argument list building accordingly.
* trans-intrinsic.c (gfc_get_intrinsic_lib_fndecl): Likewise.
* trans-types.c (gfc_get_function_type): Likewise.
From-SVN: r173375
Diffstat (limited to 'gcc/tree.c')
-rw-r--r-- | gcc/tree.c | 38 |
1 files changed, 38 insertions, 0 deletions
@@ -7640,6 +7640,44 @@ build_varargs_function_type_list (tree return_type, ...) return args; } +/* Build a function type. RETURN_TYPE is the type returned by the + function; VAARGS indicates whether the function takes varargs. The + function takes N named arguments, the types of which are provided in + ARG_TYPES. */ + +static tree +build_function_type_array_1 (bool vaargs, tree return_type, int n, + tree *arg_types) +{ + int i; + tree t = vaargs ? NULL_TREE : void_list_node; + + for (i = n - 1; i >= 0; i--) + t = tree_cons (NULL_TREE, arg_types[i], t); + + return build_function_type (return_type, t); +} + +/* Build a function type. RETURN_TYPE is the type returned by the + function. The function takes N named arguments, the types of which + are provided in ARG_TYPES. */ + +tree +build_function_type_array (tree return_type, int n, tree *arg_types) +{ + return build_function_type_array_1 (false, return_type, n, arg_types); +} + +/* Build a variable argument function type. RETURN_TYPE is the type + returned by the function. The function takes N named arguments, the + types of which are provided in ARG_TYPES. */ + +tree +build_varargs_function_type_array (tree return_type, int n, tree *arg_types) +{ + return build_function_type_array_1 (true, return_type, n, arg_types); +} + /* Build a METHOD_TYPE for a member of BASETYPE. The RETTYPE (a TYPE) and ARGTYPES (a TREE_LIST) are the return type and arguments types for the method. An implicit additional parameter (of type |