diff options
author | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-03-28 14:47:45 +0000 |
---|---|---|
committer | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-03-28 14:47:45 +0000 |
commit | e7ed5dd7808040bd28347abddf15b54817c89296 (patch) | |
tree | 9ae131a36d66e181fa70e08625f81cc6b17e71d7 /gcc/testsuite/gcc.dg/pr52691.c | |
parent | 8ef8c098038af28570be516f8655b806137aee8e (diff) | |
download | gcc-e7ed5dd7808040bd28347abddf15b54817c89296.tar.gz |
PR middle-end/52691
* tree-ssa-ccp.c (optimize_stdarg_builtin): Optimize
__builtin_va_start to __builtin_next_arg if the latter is
builtin_decl_explicit_p rather than when it is not.
* gcc.dg/pr52691.c: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@185917 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/testsuite/gcc.dg/pr52691.c')
-rw-r--r-- | gcc/testsuite/gcc.dg/pr52691.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/pr52691.c b/gcc/testsuite/gcc.dg/pr52691.c new file mode 100644 index 00000000000..7a2d7d8ebb1 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr52691.c @@ -0,0 +1,24 @@ +/* PR middle-end/52691 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-optimized" } */ + +#include <stdarg.h> + +int +foo (int a, ...) +{ + int b = 0, c = 0; + va_list ap; + va_start (ap, a); + if (a > 1) + b = va_arg (ap, double); + if (a > 2) + c = va_arg (ap, long long); + va_end (ap); + return a + b + c; +} + +/* { dg-final { scan-tree-dump "__builtin_next_arg" "optimized" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */ +/* { dg-final { scan-tree-dump "__builtin_next_arg" "optimized" { target { powerpc*-*-darwin* powerpc*-*-aix* } } } } */ +/* { dg-final { scan-tree-dump "__builtin_next_arg" "optimized" { target { powerpc*-*-linux* && lp64 } } } } */ +/* { dg-final { cleanup-tree-dump "optimized" } } */ |