re PR c/35739 (ICE with _Decimal128 and va_list)

PR c/35739
	* tree-nrv.c (tree_nrv): Don't optimize if result_type is GIMPLE
	reg type.

	* gcc.dg/dfp/pr35739.c: New test.

From-SVN: r134351
This commit is contained in:
Jakub Jelinek 2008-04-16 18:01:57 +02:00 committed by Jakub Jelinek
parent 3d5e00a036
commit 12e19e0588
4 changed files with 29 additions and 1 deletions

View File

@ -1,5 +1,9 @@
2008-04-16 Jakub Jelinek <jakub@redhat.com>
PR c/35739
* tree-nrv.c (tree_nrv): Don't optimize if result_type is GIMPLE
reg type.
PR tree-optimization/35899
* tree-inline.c (expand_call_inline): Use GIMPLE_STMT_OPERAND
rather than TREE_OPERAND.

View File

@ -1,5 +1,8 @@
2008-04-16 Jakub Jelinek <jakub@redhat.com>
PR c/35739
* gcc.dg/dfp/pr35739.c: New test.
PR tree-optimization/35899
* gcc.dg/pr35899.c: New test.

View File

@ -0,0 +1,16 @@
/* PR c/35739 */
/* { dg-do compile { target *-*-linux* } } */
/* { dg-options "-O -fpreprocessed -fmudflap" } */
_Decimal128
foo (int n, ...)
{
int i;
_Decimal128 j = 0;
__builtin_va_list ap;
__builtin_va_start (ap, n);
for (i = 0; i < n; i++)
j += __builtin_va_arg (ap, _Decimal128);
__builtin_va_end (ap);
return j;
}

View File

@ -1,5 +1,5 @@
/* Language independent return value optimizations
Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.
Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
This file is part of GCC.
@ -115,6 +115,11 @@ tree_nrv (void)
if (!aggregate_value_p (result, current_function_decl))
return 0;
/* If a GIMPLE type is returned in memory, finalize_nrv_r might create
non-GIMPLE. */
if (is_gimple_reg_type (result_type))
return 0;
/* Look through each block for assignments to the RESULT_DECL. */
FOR_EACH_BB (bb)
{