comparison gcc/testsuite/g++.dg/ipa/devirt-19.C @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children 84e7813d76e9
comparison
equal deleted inserted replaced
68:561a7518be6b 111:04ced10e8804
1 /* We should specialize for &b and devirtualize the call.
2 Previously we were failing by considering CLOBBER statement to be
3 a type change. */
4 /* { dg-do compile } */
5 /* { dg-options "-O2 -fdump-ipa-cp" } */
6 struct A {
7 void operator==(const A &);
8 };
9 class B {
10 public:
11 A m_fn1();
12 A m_fn2();
13 };
14 template <typename T, typename M> class C {
15 public:
16 T Key;
17 const M &m_fn2(const T &);
18 virtual void m_fn1() {}
19 B _map;
20 };
21
22 C<int, int> b;
23 template <typename T, typename M> const M &C<T, M>::m_fn2(const T &) {
24 A a = _map.m_fn2();
25 a == _map.m_fn1();
26 m_fn1();
27 }
28
29 void fn1() { b.m_fn2(0); }
30 /* { dg-final { scan-ipa-dump-times "Discovered a virtual call to a known target" 1 "cp" } } */
31