From: J"orn Rennecke Date: Thu, 18 Aug 2005 16:42:25 +0000 (+0000) Subject: sh.c (sh_gimplify_va_arg_expr): Loop to substitute a RECORD_TYPE record with the... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=8a2209bfdbc6b924513c9fa6ef1dfe28b7bd1366;p=gcc.git sh.c (sh_gimplify_va_arg_expr): Loop to substitute a RECORD_TYPE record with the type of its only member. * sh.c (sh_gimplify_va_arg_expr): Loop to substitute a RECORD_TYPE record with the type of its only member. From-SVN: r103254 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c384e668297..65af73ff27b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2005-08-18 J"orn Rennecke + + * sh.c (sh_gimplify_va_arg_expr): Loop to substitute a RECORD_TYPE + record with the type of its only member. + 2005-08-18 David Edelsohn * config/rs6000/rs6000.md (ltu_compare): Convert to @@ -81,6 +86,9 @@ 2005-08-17 J"orn Rennecke + * 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. + * varasm.c (decode_reg_name): Skip empty additional register names. 2005-08-16 Zdenek Dvorak diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c index 12055408dd2..ed132f6c82d 100644 --- a/gcc/config/sh/sh.c +++ b/gcc/config/sh/sh.c @@ -6678,20 +6678,24 @@ sh_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p, /* Structures with a single member with a distinct mode are passed like their member. This is relevant if the latter has a REAL_TYPE or COMPLEX_TYPE type. */ - if (TREE_CODE (type) == RECORD_TYPE - && TYPE_FIELDS (type) - && TREE_CODE (TYPE_FIELDS (type)) == FIELD_DECL - && (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) + while (TREE_CODE (type) == RECORD_TYPE + && TYPE_FIELDS (type) + && TREE_CODE (TYPE_FIELDS (type)) == FIELD_DECL + && (TREE_CODE (TREE_TYPE (TYPE_FIELDS (type))) == REAL_TYPE + || TREE_CODE (TREE_TYPE (TYPE_FIELDS (type))) == COMPLEX_TYPE + || TREE_CODE (TREE_TYPE (TYPE_FIELDS (type))) == RECORD_TYPE) + && TREE_CHAIN (TYPE_FIELDS (type)) == NULL_TREE) { 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))); + { + gcc_assert (TYPE_ALIGN (type) + < GET_MODE_ALIGNMENT (TYPE_MODE (field_type))); + break; + } } if (TARGET_SH4)