From c26104e4948427b5b95b7f3b8b1ed47c7e6e5850 Mon Sep 17 00:00:00 2001 From: Joern Rennecke Date: Wed, 17 Aug 2005 20:44:24 +0100 Subject: [PATCH] sh.c (sh_gimplify_va_arg_expr): Don't substitute a RECORD_TYPE record with the type of its only member if... * sh.c (sh_gimplify_va_arg_expr): Don't substitute a RECORD_TYPE record with the type of its only member if the modes don't match. From-SVN: r103223 --- gcc/config/sh/sh.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c index c9cd3c83d45..12055408dd2 100644 --- a/gcc/config/sh/sh.c +++ b/gcc/config/sh/sh.c @@ -6684,7 +6684,15 @@ sh_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p, && (TREE_CODE (TREE_TYPE (TYPE_FIELDS (type))) == REAL_TYPE || TREE_CODE (TREE_TYPE (TYPE_FIELDS (type))) == COMPLEX_TYPE) && TREE_CHAIN (TYPE_FIELDS (type)) == NULL_TREE) - type = TREE_TYPE (TYPE_FIELDS (type)); + { + tree field_type = TREE_TYPE (TYPE_FIELDS (type)); + + if (TYPE_MODE (type) == TYPE_MODE (field_type)) + type = field_type; + else + gcc_assert (TYPE_ALIGN (type) + < GET_MODE_ALIGNMENT (TYPE_MODE (field_type))); + } if (TARGET_SH4) {