aboutsummaryrefslogtreecommitdiff
path: root/gcc/c-common.c
diff options
context:
space:
mode:
authorRichard Henderson <rth@cygnus.com>1999-07-26 22:43:56 -0700
committerRichard Henderson <rth@gcc.gnu.org>1999-07-26 22:43:56 -0700
commitdaf68dd71ff9dc5c3f97743d702204be6fe253ae (patch)
treeb886fd4e7664e9eaa8f09a635e4f5c662edec2c4 /gcc/c-common.c
parentf654e526835767b05b3faa7464dd18abe50027a4 (diff)
downloadgcc-daf68dd71ff9dc5c3f97743d702204be6fe253ae.zip
gcc-daf68dd71ff9dc5c3f97743d702204be6fe253ae.tar.gz
gcc-daf68dd71ff9dc5c3f97743d702204be6fe253ae.tar.bz2
builtins.c (stabilize_va_list): Don't INDIRECT_REF through an ARRAY_TYPE.
* builtins.c (stabilize_va_list): Don't INDIRECT_REF through an ARRAY_TYPE. (std_expand_builtin_va_start): Back out one word if !stdarg_p. (expand_builtin_va_end): Evaluate arg for side effects. * c-common.c (c_common_nodes_and_builtins): Construct a va_list_arg_type_node to handle array decomposition to pointer. From-SVN: r28283
Diffstat (limited to 'gcc/c-common.c')
-rw-r--r--gcc/c-common.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/gcc/c-common.c b/gcc/c-common.c
index 50a27fe..4c083de 100644
--- a/gcc/c-common.c
+++ b/gcc/c-common.c
@@ -3435,6 +3435,7 @@ c_common_nodes_and_builtins (cplus_mode, no_builtins, no_nonansi_builtins)
/* Either char* or void*. */
tree traditional_ptr_type_node;
tree va_list_ptr_type_node;
+ tree va_list_arg_type_node;
#ifdef BUILD_VA_LIST_TYPE
BUILD_VA_LIST_TYPE(va_list_type_node);
@@ -3443,8 +3444,14 @@ c_common_nodes_and_builtins (cplus_mode, no_builtins, no_nonansi_builtins)
#endif
pushdecl (build_decl (TYPE_DECL, get_identifier ("__builtin_va_list"),
va_list_type_node));
+
va_list_ptr_type_node = build_pointer_type (va_list_type_node);
+ if (TREE_CODE (va_list_type_node) == ARRAY_TYPE)
+ va_list_arg_type_node = build_pointer_type (TREE_TYPE (va_list_type_node));
+ else
+ va_list_arg_type_node = va_list_type_node;
+
endlink = void_list_node;
int_endlink = tree_cons (NULL_TREE, integer_type_node, endlink);
double_endlink = tree_cons (NULL_TREE, double_type_node, endlink);
@@ -3636,7 +3643,7 @@ c_common_nodes_and_builtins (cplus_mode, no_builtins, no_nonansi_builtins)
builtin_function ("__builtin_va_end",
build_function_type (void_type_node,
tree_cons (NULL_TREE,
- va_list_type_node,
+ va_list_arg_type_node,
endlink)),
BUILT_IN_VA_END, NULL_PTR);
@@ -3645,7 +3652,7 @@ c_common_nodes_and_builtins (cplus_mode, no_builtins, no_nonansi_builtins)
tree_cons (NULL_TREE,
va_list_ptr_type_node,
tree_cons (NULL_TREE,
- va_list_type_node,
+ va_list_arg_type_node,
endlink))),
BUILT_IN_VA_COPY, NULL_PTR);