2015-03-24 Paolo Carlini <paolo.carlini@oracle.com>
[official-gcc.git] / gcc / testsuite / g++.dg / ipa / devirt-19.C
blob13686e3e025758c4de79009369bc7df36346bb2b
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();
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;
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();
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 /* { dg-final { cleanup-ipa-dump "cp" } } */