summaryrefslogtreecommitdiff
path: root/gcc/builtins.c
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2005-12-20 16:20:27 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2005-12-20 16:20:27 +0000
commitf5a7da0f62f3eed45dad990ef70a91d45a3fb5d3 (patch)
tree6b23939362e89fdccf8a629a4075095b0d5d1906 /gcc/builtins.c
parent338b5886eaf654b03dd59f66c888f1cf6f9f47db (diff)
downloadgcc-f5a7da0f62f3eed45dad990ef70a91d45a3fb5d3.tar.gz
re PR middle-end/24306 (va_arg gets confused when skipping over certain zero-sized types with -msse)
2005-12-20 Richard Guenther <rguenther@suse.de> PR middle-end/24306 * builtins.c (std_gimplify_va_arg_expr): Do not align va frame for zero sized types. * config/i386/i386.c (ix86_gimplify_va_arg): Likewise. * gcc.target/i386/pr24306.c: New testcase. From-SVN: r108854
Diffstat (limited to 'gcc/builtins.c')
-rw-r--r--gcc/builtins.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/gcc/builtins.c b/gcc/builtins.c
index 29ec05c7272..7c5711195b5 100644
--- a/gcc/builtins.c
+++ b/gcc/builtins.c
@@ -4162,7 +4162,8 @@ std_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p, tree *post_p)
/* va_list pointer is aligned to PARM_BOUNDARY. If argument actually
requires greater alignment, we must perform dynamic alignment. */
- if (boundary > align)
+ if (boundary > align
+ && !integer_zerop (TYPE_SIZE (type)))
{
t = fold_convert (TREE_TYPE (valist), size_int (boundary - 1));
t = build2 (MODIFY_EXPR, TREE_TYPE (valist), valist_tmp,