diff options
Diffstat (limited to 'gcc-4.9/gcc/testsuite/g++.dg/tree-ssa/pr8781.C')
-rw-r--r-- | gcc-4.9/gcc/testsuite/g++.dg/tree-ssa/pr8781.C | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/tree-ssa/pr8781.C b/gcc-4.9/gcc/testsuite/g++.dg/tree-ssa/pr8781.C new file mode 100644 index 000000000..cc518a0d2 --- /dev/null +++ b/gcc-4.9/gcc/testsuite/g++.dg/tree-ssa/pr8781.C @@ -0,0 +1,28 @@ +/* { dg-do compile } */ +/* { dg-options "-O -fno-tree-sra -fdump-tree-fre1-details" } */ + +int f(); + +template<typename predicate> +class noop_t { + const predicate &pred; +public: + explicit noop_t(const predicate &p) : pred(p) {} + + int operator()() const { return pred(); } +}; + +template<typename predicate> +inline noop_t<predicate> noop(const predicate pred) { + return noop_t<predicate>(pred); +} + +int x() +{ + return (noop(noop(noop(noop(noop(noop(noop(noop(noop(f)))))))))()); +} + +/* We should optimize this to a direct call. */ + +/* { dg-final { scan-tree-dump "Replacing call target with f" "fre1" } } */ +/* { dg-final { cleanup-tree-dump "fre1" } } */ |